如何通过XML存储/发送特定语言的字符


How to store/send language specific characters via XML

我有一个使用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。