PHP 解析问题 - 和

问题描述 投票:0回答:3

当我尝试解析一些带有

 
的 html,然后
echo
它时,
 
“变成”这个字符: 。另外,
html_entity_decode()
str_replace()
不会改变它。

为什么会发生这种情况?我怎样才能删除?

php html parsing character-encoding
3个回答
32
投票

不间断空格存在于两个字节的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 将其全部对齐。 另请参阅:

页面上显示“—而不是“'”

  • html_entity_decode(" ") == '\xa0'

2
投票
$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 编码服务器到数据库的连接,因为在使用例如时您会遇到同样的问题
à


2
投票
© www.soinside.com 2019 - 2024. All rights reserved.