【问题标题】:PHP: Converting from UTF-8 HTMLPHP:从 UTF-8 HTML 转换
【发布时间】:2009-08-07 13:37:30
【问题描述】:

我有一个想要解析的法语网站,但在将 (uft-8) html 转换为 latin-1 时遇到问题。

问题表现在下面的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 时,它最终会成为未知字符 (�)。

如何确保两个测试都通过?

【问题讨论】:

  • 为什么'&'和'nbsp;'之间有空格?这是您要解决的问题吗?
  • 因为我不能在没有空格的情况下编写它,因为如果我不这样做,SO 会将其转换为空格

标签: php html parsing utf-8


【解决方案1】:

test1 没有失败,它的答案是正确的。您比较的字符串不一样。 “ ” 没有解码为空格 (0x20)。这是一个不间断的空格字符,因此被解码为0xa0。当您更改 strTo 以在冒号前包含该字符时,assertEquals 将返回 true。当然,您必须确保您的文件以 UTF-8 编码保存,就像 PERR0_HUNTER mentioned 一样,但看到您使用“'”字符,您可能已经这样做了。 :)

【讨论】:

    【解决方案2】:

    作为一个小建议,确保你的.php文件编码设置为utf8,你不知道有多少人错过了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2012-08-04
      • 2014-07-02
      • 2018-10-01
      • 2018-09-06
      • 2015-10-06
      • 1970-01-01
      相关资源
      最近更新 更多