La conversión de una cadena UTF-8 en UTF-8 utilizando iconv()
utilizando el parámetro //IGNORE
produce un resultado donde los caracteres UTF-8 no válidos se eliminan.
Por lo tanto, puede detectar un carácter roto comparando la longitud de la cadena antes y después de la operación iconv. Si difieren, contenían un carácter roto.
caso de prueba (asegúrese de guardar el archivo como UTF-8):
<?php
header("Content-type: text/html; charset=utf-8");
$teststring = "Düsseldorf";
// Deliberately create broken string
// by encoding the original string as ISO-8859-1
$teststring_broken = utf8_decode($teststring);
echo "Broken string: ".$teststring_broken ;
echo "<br>";
$teststring_converted = iconv("UTF-8", "UTF-8//IGNORE", $teststring_broken);
echo $teststring_converted;
echo "<br>";
if (strlen($teststring_converted) != strlen($teststring_broken ))
echo "The string contained an invalid character";
en teoría, se podría caer //IGNORE
y simplemente prueba para un fallido (vacío) iconv
operación, pero puede haber otros razones para que un ícono falle solo caracteres inválidos ... No lo sé. Usaría el método de comparación.
tratan en lugar de –
Desafortunadamente no. – James
Este es el enfoque equivocado. Debería agregar más información acerca de lo que está haciendo, probablemente haya mejores formas de hacer lo que quiera –