使用特殊字符解析XML(UTF-8)

Sto*_*ped 4 php xml encoding utf-8

我开始使用一些看起来像这样的XML(简化):

<?xml version="1.0" encoding="UTF-8"?>
<alldata>
   <data name="Forsetì" />
</alldata>
</xml>
Run Code Online (Sandbox Code Playgroud)

但是在我用simplexml_load_string特殊字符(i)解析之后,它变得ì非常明显.

有没有办法防止这种情况发生?

我知道XML很好,当保存为.txt并在浏览器中查看时,字符很好.当我在XML上使用simplexml_load_string然后将值保存为文本文件或数据库时,它会被破坏.

Lac*_*che 6

这看起来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);
Run Code Online (Sandbox Code Playgroud)

保存到数据库
您的数据库列未使用UTF-8排序规则,因此您应该使用iconv将字符串转换为数据库使用的字符集.

假设您的数据库排序规则与您呈现的编码相同,则从数据库读取时不必执行任何操作.

说明
在UTF-8中,0xc2前缀字节用于访问"Latin-1 Supplement"块的上半部分,其中包括重音字母,货币符号,分数,上标2和3,版权和注册商标符号等字符,以及不间断的空间.

但是在ISO-8859-1中,字节0xC2代表Â.所以当你的UTF-8字符串被误解为其中之一时,你会得到一些其他无意义的字符.