我得到了一个系统,以前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。