3 Stimmen

XML-Zeichenkodierungsprobleme mit Akzenten

Ich hatte das Problem jetzt schon ein paar Mal, während ich an Projekten gearbeitet habe, und ich würde gerne wissen, ob es eine elegante Lösung gibt.

Problem Ich ziehe Tweets über XML von Twitter und lade sie in meine Datenbank hoch. Wenn ich sie jedoch auf dem Bildschirm ausgebe, erhalte ich diese Zeichen:

"moved to dusseldorf.â" ODER también

und wenn ich russische Zeichen habe, erhalte ich viele hässliche Kästchen an ihrer Stelle.

Was ich gerne hätte, ist, dass die korrekten nativen Akzente unter einer Kodierung angezeigt werden. Ich dachte, das sei mit UTF-8 möglich.

Was ich verwende

  • PHP, MYSQL

Nachdem ich die XML-Datei eingelesen habe, bereinige ich die Daten wie folgt:

    $data = trim($data);
    $data = htmlentities($data);
    $data = mysql_real_escape_string($data);

Meine Datenbank-Sortierung ist: utf8_general_ci

Die Zeichensatz der Webseite ist: charset=UTF-8

Ich glaube, es könnte etwas mit HTML-Entities zu tun haben, aber ich würde mich wirklich über eine Lösung freuen, die bei allen Projekten funktioniert.

Vielen Dank im Voraus.

6voto

EdoDodo Punkte 8090

Ersetzen Sie diese Zeile:

$data = htmlentities($data);

Mit diesem:

$data = htmlentities($data, null, "UTF-8");

Auf diese Weise belässt htmlentities() gültige UTF-8-Zeichen unverändert. Weitere Informationen finden Sie in der Dokumentation zu htmlentities().

2voto

Pekka Punkte 429407

Sie müssen die Kodierung Ihrer Verbindung auf UTF-8 ändern (normalerweise ist es iso-8859-1). Siehe hier: Wie kann ich das '€' Symbol in MySQL mit PHP speichern?

Das Aufrufen von htmlentities() ist unnötig, wenn Sie die Codierungen richtig einstellen. Ich würde es komplett entfernen. Sie müssen nur darauf achten, htmlspecialchars() zu verwenden, wenn Sie die Daten in einem HTML-Kontext ausgeben.

0voto

Kerrek SB Punkte 445528

Stellen Sie sicher, dass Sie Ihre PHP-interne Codierung auf UTF8 mit iconv_set_encoding festlegen und dass Sie htmlentities mit den Codierungsinformationen aufrufen, wie EdoDodo es gesagt hat. Stellen Sie außerdem sicher, dass Ihre Datenbank mit UTF8-Codierung speichert, obwohl Sie sagen, dass dies bereits der Fall ist.

0voto

Spudley Punkte 161296

Sie können htmlentities() nicht im Standardzustand für XML-Daten verwenden, da diese Funktion HTML-Entitäten und nicht XML-Entitäten erzeugt.

Der Unterschied besteht darin, dass die HTML-DTD eine Reihe von Entitätscodes definiert, die von Webbrowsern interpretiert werden. Die meisten XML-DTDs definieren sie jedoch nicht (falls das XML überhaupt eine DTD hat).

Die einzigen Standardentitätscodes, die XML zur Verfügung stehen, sind >, < und &. Alle anderen Entitäten müssen mit ihrer numerischen Entität dargestellt werden.

PHP hat keine xmlentities() Funktion, aber wenn Sie die Handbuchseite für htmlentities() lesen, werden Sie in den Kommentaren sehen, dass viele Leute dasselbe Problem hatten und ihre Lösungen gepostet haben. Nach einem kurzen Durchsehen empfehle ich, sich die mit philsXMLClean() benannte Lösung anzusehen.

Hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X