En primer lugar, tenga en cuenta que no es posible detectar si el texto pertenece a una codificación específica no deseada. Solo puedes verificar si una cadena es válida en una codificación dada.
Puede utilizar la verificación de validez UTF-8 que está disponible en preg_match
[PHP Manual] desde PHP 4.3.5. Se volverá 0
(sin información adicional) si se da una cadena no válida:
$isUTF8 = preg_match('//u', $string);
Otra posibilidad es mb_check_encoding
[PHP Manual]:
$validUTF8 = mb_check_encoding($string, 'UTF-8');
Otra de las funciones que puede utilizar es mb_detect_encoding
[PHP Manual]:
$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));
Es importante establecer el parámetro strict
en true
.
Además, iconv
[PHP Manual] le permite cambiar/eliminar secuencias no válidas sobre la marcha. (Sin embargo, si iconv
encuentros tal secuencia, se genera una notificación; este comportamiento no se puede cambiar.)
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL;
Usted puede utilizar @
y comprobar la longitud de la cadena de retorno:
strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string));
Comprobar los ejemplos en la página del manual iconv
también.
No ha compartido el código fuente de donde se deriva el aviso. Debe agregarlo si quiere una sugerencia más concreta.
Mientras tanto he encontrado esto: http: // stackoverflow.com/questions/4407854/how-to-detect-if-have-to-apply-utf8-decode-or-encode-on-a-string – rsk82