PHP解析问题 - 和

时间:2010-12-23 01:15:07

标签: php html parsing character-encoding

当我尝试解析一些h  通过它然后echo “变成”这个角色:Â。此外,html_entity_decode()str_replace()不会更改它。

为什么会这样?我怎样才能删除Â?

3 个答案:

答案 0 :(得分:32)

non-breaking space存在于两个字节的UTF-8中:0xC20xA0

当这些字节用ISO-8859-1(单字节编码)而不是UTF-8(多字节编码)表示时,那些字节分别变为字符Â而另一个字节变为非破坏字节空间

显然,您正在使用UTF-8解析HTML并使用ISO-8859-1回显结果。要解决此问题,您需要 使用ISO-8859-1 解析HTML或使用UTF-8回显结果。我建议一直使用UTF-8。浏览PHP UTF-8 cheatsheet以将其全部对齐。

答案 1 :(得分:2)

html_entity_decode(" ") == '\xa0'

我认为通过设计,我不明白为什么str_replace不适合你,试试这个片段:

$nbsp = html_entity_decode(" ");
$s = html_entity_decode("[ ]");
$s = str_replace($nbsp, " ", $s);
echo $s;

或者\ xa0它不是一个有效的unicode字符串,因此使用html_entity_decode()的结果可能更适合文本替换而不是\ xa0。

BalusC的解释看起来似乎有点可能你试图插入utf-8 \ xc2 \ xa0然后尝试将其显示为拉丁语而不是utf8,如果你想使用unicode东西你应该保持utf-8编码到处,从服务器到db的charset,因为你在使用eg时会遇到同样的问题à

答案 2 :(得分:2)

preg_replace()也可以做到这一点:

preg_replace("/&#?[a-z0-9]{2,8};/i","", $var);