当我尝试解析一些h
通过它然后echo
,
“变成”这个角色:Â。此外,html_entity_decode()
和str_replace()
不会更改它。
为什么会这样?我怎样才能删除Â?
答案 0 :(得分:32)
non-breaking space存在于两个字节的UTF-8中:0xC2
和0xA0
。
当这些字节用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);