2009-08-07 6 views
0

구문 분석하려는 프랑스어 사이트가 있지만 (uft-8) html을 latin-1로 변환하는 데 문제가 있습니다.PHP : UTF-8 HTML에서 변환

문제는 다음 phpunit을 테스트 케이스에 나타내

class Test extends PHPUnit_Framework_TestCase { 

    private static function fromHTML($str){ 
     return html_entity_decode($str, ENT_QUOTES, 'UTF-8'); 
    } 

    public function test1(){ 

     //REMOVE THE SPACE between the '&' and 'nbsp'. SO won't 
     //let me write it without the space 
     $strFrom = 'Wanted& nbsp;: les Chasseurs de Tamriel'; 
     $strTo = 'Wanted : les Chasseurs de Tamriel'; 
     $strFrom = self::fromHTML($strFrom); 
     $this->assertEquals($strTo, $strFrom); 
    } 

    public function test2(){ 
     $strFrom = 'Remplacement d’Almalexia'; 
     $strTo  = 'Remplacement d’Almalexia'; 
     $strFrom = self::fromHTML($strFrom); 
     $this->assertEquals($strTo, $strFrom); 
    } 

    } 

TEST2 잘 완성한다. test1은 공간이 정확하지 않으므로 ascii로 변환 될 때 알 수없는 문자 ()로 끝납니다.

두 테스트가 모두 통과하는 것을 어떻게 보장합니까?

+0

왜 '&'와 'nbsp;'사이에 공백이 있습니까? 그게 당신이 고치려고하는 것입니까? – Nate

+0

왜냐하면 나는 공간이 없으면 그것을 쓸 수 없기 때문이다. 그렇지 않다면 나는 공간으로 변환한다. – Yacoby

+0

"& nbsp;"라고 쓰면된다. – Bombe

답변

2

test1 그 답이 맞습니다. 비교하는 문자열은 동일하지 않습니다. "& nbsp;"는 이 아니며이 아닌 공간 (0x20)으로 디코딩됩니다. 이것은 깨지지 않는 공백 문자이며, 따라서 0xa0으로 디코딩됩니다. 콜론 앞에 해당 문자가 포함되도록 strTo을 변경하면 assertEquals이 true를 반환합니다. 물론 파일이 UTF-8 인코딩으로 저장되었는지 확인해야합니다. PERR0_HUNTER mentioned과 마찬가지로 " '"문자를 사용하고있을 가능성이 높습니다. :)

2

작은 제안으로 .php 파일 인코딩이 utf8로 설정되어 있는지 확인하십시오. 얼마나 많은 사람들이 그것을 놓쳤는 지 모릅니다.