将中文字符从ISO-8859-1转换为UTF-8


Convert the Chinese Characters From ISO-8859-1 To UTF-8

我得到了一个系统,以前html编码类型设置为ISO-8859-1,它导致所有汉字都以"&'#36830;&'#34915;&'#35033;"的格式存储。

所以我的问题是,如何将上面的格式转换回UTF-8中的中文单词?

供您参考,我曾尝试过utf8_decode、iconv,但都不起作用。:(

非常感谢。

该字符串的当前文本编码相当不实际。您所拥有的是HTML实体;它们与底层的"物理"编码(如ISO-8859或UTF-8)几乎没有关系。您想要的是将这些HTML实体解码为特定编码中字符的字节表示,在本例中为UTF-8。因此:

echo html_entity_decode('连衣裙', ENT_COMPAT, 'UTF-8');
// 连衣裙

您需要使用:

utf8_encode($data);

而不是解码,以将当前的ISO-8859-1转换为UTF-8。

一些原生PHP函数,如strtolower()、strtoupper()和ucfirst(),在使用UTF-8字符串时并不总是能正常工作。可能的解决方案:首先转换为拉丁文或在代码中添加以下行:

setlocale(LC_CTYPE, 'C');

请确保不要使用BOM(字节顺序标记)UTF-8文件标记保存PHP文件(您的浏览器可能会在网站上的PHP页面之间显示这些BOM字符)。

仅供参考:

ISO-8859-1=>阿尔巴尼亚语、巴西语、加泰罗尼亚语、丹麦语、荷兰语、英语、芬兰语、法语、德语、葡萄牙语、挪威语、西班牙语、瑞典语

UTF-8=>中文(简体)、中文(繁体)、日语、波斯语

有很多工具可以将字符引用转换为字符,编写这样的工具相当简单,尤其是如果您知道引用都是十进制的。所以答案实际上取决于软件环境。

例如,要对单个HTML文档进行这样的转换,可以使用BabelPad编辑器:命令Convert→数字字符参考(NCR)→NCR转换为Unicode,并将结果保存为UTF-8。