我开始使用一些看起来像这样的XML(简化):
但是在我使用simplexml_load_string解析它后,特殊字符(i)变为:Ã-这显然是非常糟糕的.
有没有办法防止这种情况发生?
我知道XML很好,当保存为.txt并在浏览器中查看时,字符很好.当我在XML上使用simplexml_load_string然后将值保存为文本文件或数据库时,它会被破坏.
解决方法:
这看起来SimpleXML正在创建一个UTF-8字符串,然后在ISO-8859-1(latin-1)或类似CP-1252的东西中呈现.
将结果保存到文件并通过Web服务器提供该文件时,浏览器将使用文件中声明的编码.
包括在网页中
由于您的网页编码不是UTF-8,因此您需要将字符串转换为您正在使用的编码,例如ISO-8859-1(latin-1).
这可以通过iconv()轻松完成:
$xmlout = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $xmlout);
保存到数据库
您的数据库列未使用UTF-8排序规则,因此您应使用iconv将字符串转换为数据库使用的字符集.
假设您的数据库排序规则与您呈现的编码相同,则从数据库读取时不必执行任何操作.
说明
在UTF-8中,0xc2前缀字节用于访问“Latin-1 Supplement”块的上半部分,其中包括重音字母,货币符号,分数,上标2和3,版权和注册商标符号等字符,和不间断的空间.
但是在ISO-8859-1中,字节0xC2代表Â.所以当你的UTF-8字符串被误解为其中之一时,你会得到一些其他无意义的字符.
标签:php,encoding,xml,utf-8
来源: https://codeday.me/bug/20190607/1191449.html