2010-08-05 47 views
14

Quiero deshabilitar cierta entrada UTF-8 (del lado del servidor), p. idiomas orientales, donde la entrada de ejemplo podría ser "伊".¿Cómo puedo detectar caracteres no occidentales?

Sin embargo, sí quiero continuar apoyando otros caracteres latinos o "latinos", como el galés ŵ y ŷ, por lo que checking against latin-1 is not possible.

¿Cuáles son mis opciones? (si es específico del idioma, se prefiere PHP)

Muchas gracias.


Razonamiento: soporte del navegador para una gran cantidad de caracteres no occidentales a menudo está ausente (por ejemplo en un navegador diferente acabo de ver una caja en la pregunta anterior), por lo que para cosas como los nombres de visualización a veces es conveniente restringir incluso si no es apropiado para los cuerpos de mensajes

+2

¿Le importa si le pregunto por qué no quiere permitir que algunos lenguajes en un sitio de internacionalización? – Borealid

+0

Pregunta justa. Es solo necesario para un campo de una tabla; el resto del sitio web lo apoyará. – HoboBen

+2

Entonces, ¿cuál es el subconjunto de caracteres que está permitiendo? ¿Se ajusta a un juego de caracteres existente? Si es así, simplemente puede 'iconv' la cadena a la codificación de destino, descartando todos los caracteres no válidos. – deceze

Respuesta

30

Just do

preg_match('/[^\\p{Common}\\p{Latin}]/u', $string) 

donde $string es una cadena UTF-8. Esto devolverá "1" si hay caracteres no latinos y devolverá "0" de lo contrario.

Ejemplo:

var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷaás??')); //int(0) 
var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷݤaás??')); //int(1) 
+0

¡Parece útil! +1 – alex

+0

Funciona muy bien, gracias v. Mucho! – HoboBen

+0

¿Hay una lista de subpatterns con nombre en alguna parte? – HoboBen

Cuestiones relacionadas