2011-01-12 6 views
1

Ich analysiere einen RSS-Feed, der eine ’ darin hat. SimpleXML verwandelt dies in ein ". Was kann ich tun, um das zu stoppen?PHPs SimpleXML wird nicht verarbeitet & # 8217; richtig

Nur um einige der Fragen zu beantworten, die aufkommen - ich ziehe einen RSS-Feed mit CURL. Wenn ich dies direkt an den Browser ausgäbe, wird ’ als ’ angezeigt, was erwartet wird. Wenn ich ein neues SimpleXMLElement mit diesem erstellen (zB $xml = new SimpleXmlElement($raw_feed); und Dump die $xml Variable wird jede Instanz von ’ mit â € ™ ersetzt.

Es scheint, dass SimpleXML Probleme mit UTF-8 Ampersand-codierte Zeichen wird mit. (Die XML-Deklaration spezifiziert UTF-8.)

habe ich die Kontrolle über das Futter nach WELLUNG dem Futter abgerufen hat, bevor er ein SimpleXMLElement zu konstruieren verwendet wird.

+2

Nachdem Sie es analysieren, was machst du mit den Wert (e)? Speichern in einer DB oder Anzeige im Browser? – xil3

+0

Wie soll es aussehen? – Oded

+0

’ oder ’ \t "richtiges einfaches Anführungszeichen" Haben Sie eine Kontrolle über den RSS? –

Antwort

0

Es kam zu haben, bis auf die Standard-Kodierung auf UTF-8 gesetzt in vier Plätzen:

  1. Das Standardgebietsschema an der Spitze der Datei: setlocale(LC_ALL, 'en_US.UTF8');
  2. die String-Codierung, die aus ROTATION kommt : utf8_encode($string);
  3. Einstellung der MySQL-Verbindung UTF-8 als Standard zu verwenden: mysqli_set_charset($database_insert_connection, 'utf8');
  4. die entsprechende Sortierung in der MySQL-Datenbank zu utf8_general_ci Einstellung

Bei Ausgabe an den Browser die entsprechende Kopfzeile (z. header ('Content-type: text/html; charset=utf-8');)

Hoffe das hilft jemandem in der Zukunft!

2

’ stellt das Unicode-Zeichen (U + 2019), dass wird in UTF-8 mit 0xE28099 codiert und wenn diese Bytefolge mit 01 interpretiert wirdrepräsentiert es die Zeichen â (0xE2), (0x80) und (0x99).

Das bedeutet, SimpleXML behandelt die Eingabe als UTF-8 codiert, aber Sie interpretieren seine Ausgabe als Windows-1252. Und wenn Sie wirklich Windows-1252 nicht verwenden möchten, vermissen Sie wahrscheinlich nur specify the character encoding of your output properly.

+0

Wie kann ich das tun? – Matty

+0

@Matty: Wie können Sie was tun? – Gumbo