iconv – Es wurde ein ungültiges Zeichen in der Eingabezeichenfolge erkannt

Lesezeit: 3 Minuten

Ich sehe nichts Illegales – irgendwelche Vorschläge, wo das Problem liegen könnte?

    if (strtolower($matches[1]) != 'utf-8') {
        var_dump($matches[1]);
        $xml = iconv($matches[1], 'utf-8', $xml);
        $xml = str_replace('encoding="'.$matches[1].'"', 'encoding="utf-8"', $xml);
    }

Unten ist mein Debug/Fehler

string(12) "windows-1252"
Notice (8): iconv() [http://php.net/function.iconv]: Detected an illegal character in input string [APP/models/sob_form.php, line 16]

Ich habe überprüft, dass der obige Code tatsächlich Zeile 16 ist

Wenn Sie jedoch die akzeptierte Antwort verwendet haben, erhalten Sie dennoch den PHP-Hinweis, wenn ein Zeichen in Ihrer Eingabezeichenfolge nicht transliteriert werden kann:

<?php
$cp1252 = '';

for ($i = 128; $i < 256; $i++) {
    $cp1252 .= chr($i);
}

echo iconv("cp1252", "utf-8//TRANSLIT", $cp1252);

PHP Notice:  iconv(): Detected an illegal character in input string in CP1252.php on line 8

Notice: iconv(): Detected an illegal character in input string in CP1252.php on line 8

Sie sollten also IGNORE verwenden, wodurch ignoriert wird, was nicht transliteriert werden kann:

echo iconv("cp1252", "utf-8//IGNORE", $cp1252);

  • Ich bekomme die gleiche Benachrichtigung, auch wenn ich “//IGNORE” auf beiden Seiten setze

    – Erel Segal-Halevi

    31. Dezember 2013 um 2:59 Uhr

  • Was meinst du auf beiden Seiten?

    – NobleUplift

    2. Januar 2014 um 14:50 Uhr

  • Und @ErelSegal-Halevi, ich würde gerne Ihren Code sehen.

    – NobleUplift

    29. April 2015 um 20:36 Uhr

  • @Mantas Aber Erel hat auf die geantwortet //IGNORE Text in meiner Antwort, weshalb mich Ihr Lob verwirrt hat.

    – NobleUplift

    30. April 2015 um 15:24 Uhr

  • Es ist lange her, aber soweit ich mich erinnere, war mein Code so etwas wie: echo iconv(“cp1252//IGNORE”, “utf-8//IGNORE”, $cp1252);

    – Erel Segal-Halevi

    3. Mai 2015 um 5:19 Uhr

Der illegale Charakter ist nicht drin $matches[1]aber in $xml

Versuchen

iconv($matches[1], 'utf-8//TRANSLIT', $xml);

Und es wäre schön, uns die Eingabezeichenfolge für eine bessere Antwort zu zeigen.

  • Ich erhalte den gleichen Hinweis, auch wenn ich auf beiden Seiten “//TRANSLIT” setze

    – Erel Segal-Halevi

    31. Dezember 2013 um 3:00 Uhr

  • Verwenden //IGNORE stattdessen

    – Grokking

    11. Juli 2017 um 13:03 Uhr

SEI SEHR VORSICHTIGkann das Problem kommen Multibyte-Codierung und unangemessene PHP-Funktionen verwendet…

Bei mir war es so und es hat eine Weile gedauert, bis ich es herausgefunden habe.

Ich bekomme zum Beispiel das a String von MySQL mit utf8mb4 (heute sehr üblich, Emojis zu codieren):

$formattedString = strtolower($stringFromMysql);
$strCleaned = iconv('UTF-8', 'utf-8//TRANSLIT', $formattedString); // WILL RETURN THE ERROR 'Detected an illegal character in input string'

Das Problem tritt nicht auf iconv() aber steht drin strtolower()
in diesem Fall.

Der geeignete Weg ist zu verwenden Multibyte-String-Funktionen mb_strtolower() Anstatt von strtolower()

$formattedString = mb_strtolower($stringFromMysql);
$strCleaned = iconv('UTF-8', 'utf-8//TRANSLIT', $formattedString); // WORK FINE

MEHR INFO

Weitere Beispiele zu diesem Problem finden Sie in dieser SO-Antwort

PHP-Handbuch auf der Multibyte-String

Benutzeravatar von atmacola
Atmacola

PHP7.2

iconv('UTF-8', 'ASCII//TRANSLIT', 'é@ùµ$`à');
// "e@uu$`a"

iconv('UTF-8', 'ASCII//IGNORE', 'é@ùµ$`à');
// "@$`"

iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', 'é@ùµ$`à');
// "e@uu$`a"

PHP7.4

iconv('UTF-8', 'ASCII//TRANSLIT', 'é@ùµ$`à');
// PHP Notice:  iconv(): Detected an illegal character

iconv('UTF-8', 'ASCII//IGNORE', 'é@ùµ$`à');
// "@$`"

iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', 'é@ùµ$`à');
// "e@u$`a"

iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', Transliterator::create('Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC')->transliterate('é@ùµ$`à'))
// "e@uu$`a" -> same as PHP 7.2

Ich habe eine Lösung gefunden:

echo iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($string));

utf8_encode() verwenden

Benutzeravatar von Abdifatah Ciilka
Abdifatah Ciilka

Diese Balglösung hat bei mir funktioniert

$result_encr="##Sƒ";

iconv("cp1252", "utf-8//IGNORE", $result_encr);

Benutzeravatar von Franck Theeten
Frank Theeten

Ich hatte den gleichen Fehler bei Dateien mit “é” -Zeichen im ASCII-Format, die von Notepad ++ generiert wurden

$row_tmp[$index]=iconv("ASCII", "UTF-8//TRANSLIT",$value);

Verwenden

$row_tmp[$index]=iconv("ISO-8859-1", "UTF-8//TRANSLIT",$value);

… scheint es zu lösen (mit einem Windows-Computer mit belgischem Gebietsschema). iconv benötigt anscheinend den genauen Code der ASCII-Erweiterung für die Quellkodierung.
mb_detect_encoding kehrt zurück “ASCII” für dieselbe Datei, seien Sie also vorsichtig, wenn der Quellkodierungsparameter aus einer Variablen stammt …

1412720cookie-checkiconv – Es wurde ein ungültiges Zeichen in der Eingabezeichenfolge erkannt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy