utf-8 und htmlentities in RSS-Feeds

8

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?

    
Doug Kaye 21.11.2008, 02:15
quelle

6 Antworten

17

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).

    
Eran Galperin 21.11.2008, 02:28
quelle
12

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%     
Gumbo 26.01.2009 09:58
quelle
5

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.

    
Kornel 26.11.2008 21:39
quelle
1

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.

    
SoapBox 21.11.2008 02:20
quelle
1

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%     
Jason Miller 26.01.2009 07:21
quelle
0

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.

    
katy lavallee 23.05.2009 00:14
quelle

Tags und Links