我有一个使用AJAX从服务器(PHP)发送/接收信息的系统。在服务器端,我假设将以下代码"存储"到XML中,然后在客户端读取和使用它:
<div id="someDiv">Čiča Gliša</div>
服务器本身在日志中没有给出'error', XML被发送,但是在客户端,当我试图读取这个时,我得到了' not well-format '错误。
XML本身是用这一行"创建"的(据我所知,我不是一个真正的后端开发人员,所以我不会对这些事情太精通,但是这次是"内容"导致了这个问题,所以我的任务是解决它。
$this->xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><xml/>')
当我将字母Č和Š更改为C和S时,它可以工作。但我不知道怎样才能让它正常工作。
在客户端使用mozilla,如果需要的话,新安装。
EDIT: XML按注释中的要求编辑
(如果我设法调试它正确)
回应:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<client_contents>
<frame>
<![CDATA[
<div id="upper">upper div</div><br>
<div id="middle">middle</div><br>
<div id="lower">lower div <br>
<a onclick="ExecuteScenario('POST',6,1);">Run Something</a></div>
]]>
</frame>
<upper>
<![CDATA[
<div class="col-lg-4 col-md-5 col-sm-6 col-xs-10 col-lg-offset-7 col-md-offset-6 col-sm-offset-5 col-xs-offset-1 info-content">
<div class="row title">
<h2>Naziv turisti?kog objekta</h2>
</div>
<div class="one-info">
<div class="icon">
<span class="glyphicon glyphicon-home"></span>
</div>
<div class="data">
<p>Ulica Cica Gli�e 15</p>
<p>11215 Donji Svrd�ibrd�ilovci</p>
</div>
</div>
</div>
]]>
</upper>
<middle>
<![CDATA[
<div> MENU </div>
]]>
</middle>
</client_contents>
<data_sets>
<Data>
</Data>
</data_sets>
<java_scripts/>
</xml>
我注意到的是有一个结束标记,而不是一个开始标记,虽然这似乎不是错误的原因,因为只要我删除字符Č
,事情就开始工作。
显然,问题在于字符串本身必须在发送到XML之前进行转换。在编辑器(如NetBeans)中编写的字符串在本例中具有某种编码(windows-1252),如果将这样的字符串传递给XML,无论XML的编码如何,它都将被错误地解释。
因为[[CDATA]]会吃任何东西,它只是保持字符串原样,然后当客户端接收数据时,它假设编码是UTF-8(因为它在XML中是这样说的),但实际上那里的字符串不是UTF-8,它是windows-1252(这是开发人员环境使用的)。
TL;博士
iconv('windows-1252', 'UTF-8', $string); //current, wanted, string
您可以使用cdata结构,例如
<mynode><![CDATA[Čiča Gliša]]></mynode>
和正确的字符串编码,如果这个字符串utf8
你需要使用utf8
为您的xml。