PHP 解析问题 -  和

2022-08-30 19:55:57

当我尝试解析一些洒在它上面的html,然后它时,“变成”这个字符:Â.而且,并且不会改变它。 echo html_entity_decode()str_replace()

为什么会发生这种情况?如何删除?


答案 1

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 备忘单以将其全部对齐。


答案 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的解释看起来似乎很合理,你可以尝试在然后尝试将其显示为拉丁语而不是utf8中插入utf-8 \xc2\xa0,如果你想使用unicode的东西,你应该在任何地方保持utf-8编码,从服务器的字符集到db,因为你在使用时会遇到同样的问题,例如。à


推荐