2009-07-21 10 views
0

Ich kratze gerade einige Daten aus dem Internet und Konvertieren in XML-Dokumente.PHP und Umgang mit fremden Zeichen für UTF-8 XML

  • Dokument geschabt wird, ist utf-8 nach seinen Meta-Tags

Das Problem ist, einige der Daten fremde Zeichen enthalten, ich habe sie in XML/utf-8 Umwandlung nicht einen Weg sicher finden kann freundliche Entitäten, die folgenden Fehler sind, was ich durch das Lesen gefunden habe, ich würde idealerweise eine Lösung mögen, die die ganze Zeit funktionieren würde.

Beispiel 1 funktioniert ordnungsgemäß, Beispiel 2 schlägt fehl. Meine Untersuchung hat das Beispiel 1 korrigiert, aber es scheint keine umfassende Lösung zu sein.

Ich habe es geschafft, das - ô - Parsing korrekt mit der folgenden Funktion auf meinem XPath zu bekommen.

$w->text(charset_decode_utf_8((string)$match->a)); 

function charset_decode_utf_8($string) { 
    if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) { 
     return $string; 
    } 
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string); 
$string = preg_replace("/([\300-\337])([\200-\277])/e","'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string); 
return $string; 
} 
 
ÖFB Stiegl Cup 
ÖFB Stiegl Cup (wrong) 

Leider auf der - Ö - in eine Doppel Einheit umgewandelt wird. Ich habe keine Ahnung, wie man es in eine richtige HTML-Entität umwandeln kann.

Ich habe versucht:

  • iso-8859-1-Codierung, wenn mein XML-Dokuments Erstellen
  • htmlentities mit utf-8-Codierung

Jede Hilfe wäre sehr dankbar mit, wie Ich reiße mir die Haare aus, um die Dinge richtig zu retten.

+2

Warum verwenden Sie die Zeichen nicht selbst? UTF-8 kann jedes Unicode-Zeichen codieren. – Gumbo

+0

was bedeutet das bitte. Zur Zeit speichere ich mein XML-Dokument, lade es in einen Browser und sehe die Fehler. –

+0

ok versucht, und beim Betrachten ich sehe:

 Côte d'Ivoire ÖFB Stiegl Cup Ykkönen 
Sie alle falsch aussehen :( –

Antwort

1

UTF-8 kann verwendet werden, um jedes Zeichen zu speichern (ein Beweis? Es speichert sie in den Webseiten, die Sie scraping sind); Also, warum einige als Entitäten kodieren?

Wenn Sie öffnen, XML-Dokumente und sehen Probleme mit Codierung, überprüfen Sie die Parameter Ihres Editor: Ist es versuchen, das Dokument als UTF-8 zu analysieren? (Einige Editoren tun dies standardmäßig nicht - wenn Sie ein Dokument auf Ihrer Festplatte mit einem Browser öffnen, könnte es UTF-8 nicht erkennen, da es keinen Server gibt, der einen Header sendet, der auf UTF-8 hinweist)

Wenn das Problem nicht ist, kann ein Beispiel für problematische XML-Dokument irgendwo hochladen?

+0

omg !!! Ich bereitete gerade vor, die Dokumente hochzuladen und fand, dass ich sauber verwendete und es die Charaktere zerstörte. Wie Sie und andere zu Recht erwähnt haben, geht es jetzt richtig durch. Was für ein Plonker :(Vielen Dank für Ihre Hilfe. –

+1

kein Problem :-) und danke für die Angabe, was das Problem war (könnte jemand anderen nützlich sein ;-)) –

-2

Nicht mit Entitätscodierung stören. Verwenden Sie stattdessen CDATA-Blöcke.

PHP versteht UTF-8 nicht. Es denkt, es ist ein Bytestream. Am besten, es so zu behandeln. Sie pendeln Bytes herum, und alles, was Sie tun müssen, ist sicherzustellen, dass sie nicht analysiert werden und sie richtig beschriftet sind.