2016-06-29 12 views
0

Ich habe ein System, das AJAX zum Senden/Empfangen von Informationen vom Server (PHP) verwendet. Auf der Serverseite, ich nehme an dem folgenden Code in den XML zu ‚Store‘ und dann lesen und es auf dem Client verwenden:So speichern/senden Sie sprachspezifische Zeichen über XML

<div id="someDiv">Čiča Gliša</div> 

Der Server selbst gibt keine ‚Fehler‘ in den Protokollen, die XML bekommt gesendet, aber auf der Client-Seite bekomme ich den "nicht gut formatiert" Fehler beim Versuch, dies zu lesen.

Die XML selbst ist mit dieser Zeile "erstellt" (soweit ich das beurteilen kann, bin ich nicht wirklich ein Backend-Entwickler, also wäre ich mit diesen Dingen nicht so kompetent, aber es ist der Inhalt "dass das Problem verursacht dieses Mal so bin ich mit der Lösung es beauftragt.

$this->xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><xml/>') 

Wenn ich die Buchstaben ändern C und S C und S es funktioniert. Aber ich weiß nicht, wie man es sonst arbeiten.

Verwendung von Mozzila auf dem Client, wenn es darauf ankommt, frisch installiert

EDIT: XML als in den Kommentaren angefordert
(wenn ich es richtig debuggen verwaltet)
Antwort:

<?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> 

Was habe ich Hinweis ist, dass es ein End-Tag ist, ohne jemals eine Öffnung ein Wesen , obwohl dies nicht die Ursache des Fehlers zu sein scheint, denn sobald ich die Zeichen Č entferne, fängt das Ding an zu arbeiten.

+0

können Sie nur mit cdata Konstruktion zum Beispiel – Naumov

+0

Nutzen Sie Inhaltstyp utf php header 8 beim Lesen oder Schreiben. –

+0

Sie meinen im HTML? – Dellirium

Antwort

0

Offenbar liegt das Problem an der Tatsache, dass die Zeichenfolge selbst konvertiert werden muss, bevor IN XML gesendet wird. Die in einem Editor wie NetBeans geschriebene Zeichenfolge hat in diesem Fall eine bestimmte Art der Codierung (windows-1252), und wenn eine solche Zeichenfolge unabhängig von der XML-Codierung an die XML-Datei übergeben wird, wird sie falsch interpretiert.

Da [[CDATA]] etwas essen würde, behält es nur die Zeichenfolge wie es ist, dann, wenn der Client die Daten empfängt, nimmt es die Codierung UTF-8 an (weil es so in der XML sagt), aber in Tatsache ist, dass die Zeichenfolge dort nicht UTF-8 ist, es ist Windows-1252 (das ist, was die Entwicklerumgebung verwendet).

TL; DR

iconv('windows-1252', 'UTF-8', $string); //current, wanted, string 
+0

Die libxml-APIs erwarten die bereitgestellten Werte als UTF-8 und geben sie als UTF-8 zurück. Dies ist unabhängig von der serialisierten XML-Zeichenkette/-Datei. Ich empfehle Ihnen, Ihre Quelldateien als UTF-8 zu speichern. (Netbeans sollte eine Option dafür haben.) – ThW

-1

Sie können nur mit cdata Konstruktion zum Beispiel

<mynode><![CDATA[Čiča Gliša]]></mynode>

und korrekt codieren Zeichenfolge, wenn diese Zeichenfolge utf8 Sie utf8 für Sie xml verwenden müssen.

+0

Ich fürchte, ich nicht direkt Zugriff auf das Hinzufügen dieser Knoten, mnerely den Inhalt, der in sie geht, aber das ist, wie sie hinzugefügt werden, von was ich kann figure: '$ DomNode-> appendChild ($ n-> createCDATASection ($ CC));' wo $ CC ist der Text, den ich geschrieben habe. Ich gehe davon aus, dass 'createCDATASection' das gleiche Ergebnis liefert wie Ihr Code oben, in diesem Fall löst es das Problem nicht. Dies ist alles in einer Schleife, die immer neue $ DomNode-Elemente erzeugt, während sie durch den Inhaltstack geht. – Dellirium

+0

@Dellirium Sie haben Fehlercode-Zeichen (nicht utf8-Symbole)? – Naumov

+0

nein, der Fehler ist wie 'geschriebenL' nicht gut formatiert, wenn versucht wird, auf den XML-Knoten zuzugreifen. Dieser Fehler wird von der Browserkonsole ausgegeben, es gibt keinen Fehler in den PHP-Protokollen. – Dellirium