the please mb_convert_encoding illegal extension enable detected php iconv

php - please - iconv-Detectó un carácter ilegal en la cadena de entrada



php iconv(): detected an illegal character in input string (4)

El carácter ilegal no está en $matches[1] , sino en $xml

Tratar

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

Y mostrarnos la cadena de entrada sería bueno para una mejor respuesta.

No veo nada ilegal, ¿alguna sugerencia sobre cuál podría ser el problema?

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); }

Abajo esta mi debug / error

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]

He verificado que el código anterior es de hecho la línea 16.


Encontré una solución:

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

utilizar utf8_encode ()


Sin embargo, si usó la respuesta aceptada, seguirá recibiendo el Aviso de PHP si no se puede transliterar un carácter en la cadena de entrada:

<?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

Así que debes usar IGNORE, que ignorará lo que no se puede transliterar:

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


TENGA MUCHO CUIDADO , el problema puede provenir de la codificación multibytes y de las funciones inadecuadas de PHP utilizadas ...

Fue el caso para mí y me tomó un tiempo resolverlo.

Por ejemplo, obtengo una cadena de MySQL usando utf8mb4 (muy común ahora para codificar emojis):

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

El problema no está en iconv() sino en strtolower() en este caso.

La forma adecuada es utilizar las funciones de cadena mb_strtolower() lugar de strtolower()

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

MÁS INFORMACIÓN

Más ejemplos de este problema están disponibles en esta respuesta SO

Manual de PHP en la cadena multibyte