2010-09-27 4 views

Antwort

13

Seien Sie sicher, dass die Kodierung UTF-8, wenn Ihre Dateien als solche codiert sind zu spezifizieren:

htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); 

Der Standardzeichensatz für htmlspecialchars ist ISO-8859-1 (Stand PHP V5.4 die Standard-charset wurde zu "UTF-8" geändert, was erklären könnte, warum die Dinge drunter und drüber gehen, wenn sie Multibyte-Charaktere treffen.

+0

Linie 207 ist hier. $ charset = 'UTF-8'; htmlspecialchars ($ text, ENT_QUOTES, $ charset); // Zeile 207 – gautamlakum

+1

Für mich war dieses Problem umgekehrt, dass der Datensatz meiner Daten tatsächlich 'ISO-8859-1' war, als ich versuchte, ihn als 'UTF-8' in htmlspecialchars zu codieren. Ich habe das Zeichensatzargument auf 'ISO-8859-1' umgestellt, und das hat das Problem gelöst. Zumindest bis ich alles komplett auf 'UTF-8' updaten kann. – Kzqai

+5

Ab PHP 5.4.0 ist der Standardwert des 3. Parameters von 'htmlspecialchars()' '' UTF-8'' - diese Antwort sollte aktualisiert werden. –

4

Sie geben beschädigte Zeichendaten in die Funktion ein oder geben die richtige Codierung nicht an.

Ich hatte dieses Problem vor einer Weile, altes Verhalten (vor PHP 5.2.7 glaube ich) war die Zeichenfolge trotz Korruption zurückzugeben, aber seit dieser Version wird es stattdessen diesen Fehler werfen.

Meine Lösung bestand darin, ein Skript zu schreiben, um meine Strings über iconv mit dem // IGNORE-Modifikator zu versorgen, um beschädigte Daten zu entfernen.

(Wir hatten eine beschädigte Datenbank, die einige Zeichenfolgen in UTF-8 hatte, einige in latin-1 normalerweise mit falsch definierten Zeichentypen in den Spalten).

(Mit Blick auf den Kommentar zu Tatu Antwort, würde ich, indem man (und spielt mit) den Inhalt des $ charset Variable starten.

+0

Ich stimme zu. Ich habe Benutzerdaten über iconv oder mb_convert_encoding() übergeben, wobei die Zeichen "from" und "to" identisch sind. Es gibt normalerweise eine Option zum Entfernen ungültiger Zeichen. –

+0

Beschädigte Daten auch hier, mb_convert_encoding ($ var, 'UTF-8') hat den Job erledigt. –

0

, die ich bekomme tatsächlich eine der häufigsten Fehler ist.

Manchmal nicht, daß ich __() Übersetzung verwenden -. einfach nur deutschen Text enthält äöü da ist es besonders wichtig ist, die Codierung der Dateien in dem Sinne

so stellen Sie sicher, dass Sie richtig speichern Sie die Dateien, die Sonderzeichen als UTF8 enthalten..

+0

Verbindung ist unterbrochen. – billynoah

1

Der richtige Code, um keine Fehler zu erhalten ist:

htmlentities($string, ENT_IGNORE, 'UTF-8') ;

Daneben Sie auch str_replace verwenden können einige schlechte Zeichen auf Ihre Bedürfnisse zu ersetzen und dann htmlentities Funktion verwenden.

Werfen Sie einen Blick auf diese rss feed es ersetzt das größere HTML-Zeichen zu gt; Etikett, das beim Lesen des RSS-Feeds möglicherweise nicht gut aussieht. Sie können dies durch etwas wie "-" oder ")" usw. ersetzen.

1

Hatte das gleiche Problem, weil ich substr auf UTF-8-String verwendet habe.
Fehler war selten und scheinbar zufällig. Fehler trat nur auf, wenn String auf Multibyte-Zeichen abgeschnitten wurde!

mb_substr das Problem gelöst :)