Ich schreibe einige RSS-Feeds in PHP und stolpere mit Zeichencodierungsproblemen. Sollte ich utf8_encode () vor oder nach htmlentities () encodieren? Ich habe zum Beispiel sowohl kaufmännische als auch chinesische Zeichen in einem Beschreibungselement, und ich bin mir nicht sicher, welche davon richtig ist:
%Vor%Und warum?
Es ist wichtig, den Zeichensatz an die Funktion htmlentities zu übergeben, da der Standardwert ISO-8859-1 lautet:
%Vor%Sie sollten htmlentities zuerst anwenden, damit utf8_encode die Entitäten richtig kodiert.
(BEARBEITEN: Ich habe meine Meinung geändert, bevor die Reihenfolge auf Grund der Kommentare keine Rolle spielte. Dieser Code ist getestet und funktioniert gut).
Erstens: Die Funktion utf8_encode
konvertiert von ISO 8859-1 in UTF-8. Sie brauchen diese Funktion also nur, wenn Ihr Eingabecode / Zeichensatz ISO 8859-1 ist. Aber warum verwendest du UTF-8 überhaupt nicht?
Zweitens: Sie brauchen htmlentities
nicht. Sie brauchen nur htmlspecialchars
, um die Sonderzeichen durch Zeichenreferenzen zu ersetzen. htmlentities
würde "zu viele" Zeichen ersetzen, die direkt mit UTF-8 codiert werden können. Wichtig ist, dass Sie die Anführungszeichen ENT_QUOTES
ebenfalls verwenden, um die einfachen Anführungszeichen zu ersetzen.
Also mein Vorschlag:
%Vor% Verwenden Sie nicht htmlentities()
!
Verwenden Sie einfach UTF-8-Zeichen. Stellen Sie nur sicher, dass Sie die Codierung des Feeds in HTTP-Headern ( Content-Type:application/xml;charset=UTF-8
) deklarieren oder andernfalls im Feed selbst mit <?xml version="1.0" encoding="UTF-8"?>
in der ersten Zeile.
Sie möchten $output = htmlentities(utf8_encode($source));
ausführen. Dies liegt daran, dass Sie zuerst Ihre internationalen Zeichen in UTF8 konvertieren und dann ein Und-Zeichen (und möglicherweise auch einige der UTF-8-Zeichen) in HTML-Entitäten einfügen möchten. Wenn Sie die Entitäten zuerst ausführen, werden einige der internationalen Zeichen möglicherweise nicht korrekt behandelt.
Wenn keiner Ihrer internationalen Zeichen durch utf8_encode geändert wird, spielt es keine Rolle, in welcher Reihenfolge Sie sie aufrufen.
Es könnte leichter sein, Htmlentities zu vergessen und einen CDATA-Abschnitt zu verwenden. Es funktioniert für den Titelbereich, der keine verschlüsselten HTML-Zeichen im Firefox-RSS-Viewer unterstützt:
%Vor%Nach vielen Versuchen & amp; Fehler, ich habe endlich eine Möglichkeit gefunden, eine Zeichenfolge aus einem utf8-codierten Datenbankwert über eine XML-Datei ordnungsgemäß in einer HTML-Seite anzuzeigen:
%Vor%Ich hoffe, das hilft jemandem.