¿Cómo verifico si el juego de caracteres de una cadena es UTF8?¿Cómo verificar el juego de caracteres de la cuerda?
Respuesta
function is_utf8($string) {
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
He comprobado. Esta función es efectiva.
si su envío al servidor u desde
echo $_SERVER['HTTP_ACCEPT_CHARSET'];
No reinventar la rueda. Hay una función integrada para esa tarea: mb_check_encoding()
.
mb_check_encoding($string, 'UTF-8');
¡Este es mi tipo de solución! –
¿Qué sucede si no tienes esa extensión instalada? – CMCDragonkai
@CMCDragonkai Si sus datos están en un formato multibyte (como UTF-8), definitivamente debe instalar la extensión PHP que proporciona las funciones para operar correctamente en su entrada. Si usa 'strlen' en una cadena UTF-8, por ejemplo, obtendrá la longitud incorrecta si la entrada contiene caracteres no ASCII. – soulmerge
Mejor aún, utilice las dos soluciones anteriores.
function isUtf8($string) {
if (function_exists("mb_check_encoding") && is_callable("mb_check_encoding")) {
return mb_check_encoding($string, 'UTF8');
}
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
Llamar a ambos function_exists() e is_callable() es redundante, puede omitir uno de ellos. Pero como is_callable() está destinado a verificar si el parámetro es una devolución de llamada válida (ver el enlace a continuación), usaría function_exists() para hacerlo más legible. Enlace al pseudo-tipo de devolución de llamada: http://php.net/manual/en/language.pseudo-types.php#language.types.callback – soulmerge
@ nikc.org - No entiendo - ¿Por qué quieres probar? si la función 'mb_check_encoding' existe? – JDelage
@JDelage porque es parte de una extensión (php.net/manual/en/book.mbstring.php) que no se garantiza que esté siempre presente. –
Sólo una nota:
No se puede determinar si una determinada cadena está codificada en UTF-8. Solo puede determinar si una cadena dada es definitivamente no codificada en UTF-8. Por favor, vea una pregunta relacionada here:
No se puede detectar si una determinada cadena (o secuencia de bytes) es una codificación UTF-8 de texto como, por ejemplo, todos y cada serie de UTF-8 octetos es también una válido (si no tiene sentido) serie de octetos Latin-1 (o alguna otra codificación). Sin embargo, no todas las series de octetos Latin-1 válidos son series UTF-8 válidas.
Ninguna de las respuestas anteriores es correcta. Sí, pueden estar trabajando. Si toma la respuesta con la función preg_replace
, ¿está tratando de matar su servidor si procesa mucha agitación? Utilice esta función pura de PHP sin expresiones regulares, trabaje el 100% del tiempo y es mucho más rápido.
if(function_exists('grk_Is_UTF8') === FALSE){
function grk_Is_UTF8($String=''){
# On va calculer la longeur de la chaîne
$Len = strlen($String);
# On va boucler sur chaque caractère
for($i = 0; $i < $Len; $i++){
# On va aller chercher la valeur ASCII du caractère
$Ord = ord($String[$i]);
if($Ord > 128){
if($Ord > 247){
return FALSE;
} elseif($Ord > 239){
$Bytes = 4;
} elseif($Ord > 223){
$Bytes = 3;
} elseif($Ord > 191){
$Bytes = 2;
} else {
return FALSE;
}
#
if(($i + $Bytes) > $Len){
return FALSE;
}
# On va boucler sur chaque bytes/caractères
while($Bytes > 1){
# +1
$i++;
# On va aller chercher la valeur ASCII du caractère/byte
$Ord = ord($String[$i]);
if($Ord < 128 OR $Ord > 191){
return FALSE;
}
# Parfait
$Bytes--;
}
}
}
# Vrai
return TRUE;
}
}
mb_detect_encoding($string);
devolverá el conjunto de caracteres actual de $string
. mb_check_encoding($string, 'UTF-8');
devolverá TRUE si conjunto de caracteres de $string
es UTF-8 persona FALSO
- 1. ¿Cómo verificar el conjunto de caracteres de cadena en Java?
- 2. cómo configurar el juego de caracteres predeterminado?
- 3. æøå caracteres de juego de caracteres HTML2PDF
- 4. Python Cuerda de limpieza + Manipulación (caracteres acentuados)
- 5. URLConnection no obtiene el juego de caracteres
- 6. Juego de caracteres Oracle JDBC y límite de caracteres 4000
- 7. MySQL Workbench juego de caracteres
- 8. ¿Cómo configurar el juego de caracteres con JAX-RS?
- 9. ¿Cómo cambiar el juego de caracteres en Apache Commons?
- 10. Definir juego de caracteres predeterminado para htmlentities()
- 11. Recortar cadena con juego de caracteres específico
- 12. UTF-8 juego de caracteres MySQL y
- 13. Mysql cambia el juego de caracteres predeterminado de la tabla al conjunto de caracteres de la base de datos
- 14. Cómo verificar caracteres especiales usando regex
- 15. ¿Cómo calcular el ancho de la cuerda en iText?
- 16. Silverlight: ¿Cómo predecir el tamaño de la cuerda?
- 17. PHP + SQL Server: cómo configurar el juego de caracteres para la conexión?
- 18. cómo medir el ancho de una cuerda con precisión?
- 19. ¿Cómo establecer un juego de caracteres en el correo electrónico usando smtplib en Python 2.7?
- 20. WinForms: ¿Cómo verificar la cantidad mínima de caracteres en el cuadro de texto en C#?
- 21. ¿Obtiene el juego de caracteres de la configuración regional actual en C?
- 22. Django set Motor de almacenamiento y juego de caracteres predeterminado
- 23. espacios de tira de cuerda usando smarty
- 24. ¿Debo usar entidades HTML para caracteres especiales si estoy usando el juego de caracteres UTF-8?
- 25. Javamail cambiando el juego de caracteres de la línea de asunto
- 26. ¿Cuál es la diferencia entre la codificación y el juego de caracteres?
- 27. ¿Cómo puedo obtener el juego de caracteres de una cadena/búfer?
- 28. ¿cómo termina la cuerda en java?
- 29. La estructura de datos de cuerda
- 30. ¿Cuándo necesito escapar caracteres dentro de un juego de caracteres regex (dentro de [])?
Puede tener UTF-8 ** y ** cadenas codificadas dentro de ISO 1 petición/archivo. ¿Cómo podrían ayudar los encabezados HTTP en cualquier caso? – DanFromGermany