从HTML实体转换为UTF-8

时间:2016-06-22 12:21:22

标签: php unicode encoding utf-8 iso-8859-1

我在将一些编码字符串转换为utf-8时遇到问题。

我有一个字符串列表,根据文档是使用数字HTML实体编码的Unicode字符串。其中一些是:

$str = 'WÖGER'; // seems to be WÖGER
$str = 'Jürgen'; // seems to be Jürgen
$str = 'POßNITZ'; // seems to be POßNITZ
$str = 'SCHLÄGER'; // seems to be SCHLÄGER

我想解码它们并转换为utf-8。

我使用HTML-ENTITIES param和mb_convert_encoding()同时尝试html_entity_decode()。我最好的结果出乎意料地是:

html_entity_decode($str, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');

并解码Jürgen successfully。但是,我没有运气解码此列表中的其他字符串。我查看ISO-8859-1编码表和变音符号的HTML代码与我列表中的内容不同。

我的问题是:我错过了一些明显的解码步骤,或者源字符串有问题吗?

更新(2016-06-27):原始字符串确实编码错误。这些字符串是在Latin-1上下文中读取UTF-8值然后将单个1字节字符编码为十六进制实体的结果,因此德语变音符ü变为ü并被编码为2个单独的字符。接受的答案成功地将它们直接解码为UTF-8。

1 个答案:

答案 0 :(得分:2)

我的理解是,尽管我可能错了,unicode字符应该由它们的代码点表示,而不是通过编码单独的UTF-8字节,这就是你所拥有的。因此,使用Ö或命名格式Ö可以更好地表示Ö

ENT_XML1的{​​{1}}标志似乎确实起到了作用,但我并不完全确定它的作用是什么。如果你想要更明确的东西:

html_entity_decode