15 Stimmen

Iconv UTF-8//IGNORE produziert immer noch den Fehler "ungültiges Zeichen"

$string = iconv("UTF-8", "UTF-8//IGNORE", $string);

Ich dachte, dieser Code würde ungültige UTF-8-Zeichen entfernen, aber es produziert [E_NOTICE] "iconv(): Detected an illegal character in input string". Was fehlt mir hier, wie entferne ich richtig ein String von unerlaubten Zeichen?

8voto

msgmash.com Punkte 1017

Das Ausgabeschatz (der zweite Parameter) sollte sich vom Eingabeschatz (erster Parameter) unterscheiden. Wenn sie gleich sind, dann wird iconv sie ablehnen, wenn unzulässige UTF-8-Zeichen im String vorhanden sind, weil sie als unzulässig gemäß dem Eingabeschatz betrachtet werden.

2voto

Paul Melekhov Punkte 121

Ich kenne 2 Methoden, wie man einen UTF-8-String mit illegalen Zeichen reparieren kann:

  1. Illegale Zeichen werden durch Fragezeichen ("?") ersetzt:

$message = mb_convert_encoding($message, 'UTF-8', 'UTF-8');

  1. Illegale Zeichen werden entfernt

$message = iconv('UTF-8', 'UTF-8//IGNORE', $message);

Die zweite Methode wurde tatsächlich in der Frage beschrieben. Aber in meinem Fall produziert sie kein E_NOTICE. Ich habe verschiedene beschädigte UTF-8-Strings mit error_reporting(E_ALL); getestet und das Ergebnis war immer wie erwartet. Möglicherweise wurde seit 2012 etwas geändert. Ich habe auf PHP 7.2.9 Win getestet.

1voto

Mahesh Hegde Punkte 991

Ich benutze mb_convert_encoding mit den unten stehenden Einstellungen, die das ungültige Zeichen entfernen:

ini_set('mbstring.substitute_character', "none");
$string= mb_convert_encoding($string, 'UTF-8', 'UTF-8');

Es funktioniert in meinem Fall. Früher habe ich untenstehende Benachrichtigung erhalten:

Hinweis: iconv(): Falsches Zeichensatz, Umwandlung von UTF-8' nach UTF-8//IGNORE' ist nicht erlaubt

$string= iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string)

-1voto

dbekin Punkte 39

Um die Meldung einfach zu ignorieren, kannst du "@" verwenden:

$string = @iconv("UTF-8", "UTF-8//IGNORE", $string);

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