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-Funktionenmb_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
… 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 …
14127200cookie-checkiconv – Es wurde ein ungültiges Zeichen in der Eingabezeichenfolge erkanntyes