2009-11-07 19 views

Respuesta

14

Aquí está map of the iso8859-8 character set. El rango E0 - FA parece estar reservado para el hebreo. Usted puede comprobar para los personajes de una clase de caracteres:

[\xE0-\xFA] 

Para UTF-8, el range reserved for Hebrew parece ser 0591 a 05F4. Por lo que podría detectar que con:

[\u0591-\u05F4] 

He aquí un ejemplo de un partido de expresiones regulares en PHP:

echo preg_match("/[\u0591-\u05F4]/", $string); 
+0

El problema es que E0-FA también son valores que ocurrirán en UTF-8, pero no exactamente como caracteres hebreos ... – gnud

+0

@gnud: Es por eso que no deberías usar la regex iso8859-8 en cadenas UTF-8 – Andomar

0

En primer lugar, una cadena de este tipo sería completamente inútil: ¿una combinación de dos juegos de caracteres diferentes?

Ambos caracteres hebreos en iso8859-8, y cada byte de secuencias multibyte en UTF-8, tienen un valor ord($char) > 127. Entonces, lo que haría es buscar todos los bytes con un valor mayor que 127, y luego verificar si tienen sentido como is8859-8, o si crees que tendrían más sentido como secuencia UTF8 ...

+0

¿Cómo puede tener un carácter ord ($ char)> 255 en ISO-8859-8? ¡Es un byte único! –

+0

Bien, bien. No sé por qué, pero me burlé por completo de que no-ascii están entre 128 y 255, corregidos ahora. – gnud

+0

Supuse que eso era lo que querías decir mientras tanto. Tienes suerte esperé antes de devolverte ;-) –

1

He aquí una pequeña función para comprobar si el primer carácter de una cadena está en hebreo:

function IsStringStartsWithHebrew($string) 
{ 
    return (strlen($string) > 1 && //minimum of chars for hebrew encoding 
     ord($string[0]) == 215 && //first byte is 110-10111 
     ord($string[1]) >= 144 && ord($string[1]) <= 170 //hebrew range in the second byte. 
     ); 
} 

buena suerte :)

3

bien si su archivo PHP está codificado con UTF-8 como debe ser en casos th en hebreo que tiene en ella, se debe utilizar la siguiente RegX:

$string="אבהג"; 
echo preg_match("/\p{Hebrew}/u", $string); 
// output: 1 
0
function is_hebrew($string) 
{ 
    return preg_match("/\p{Hebrew}/u", $string); 
} 
Cuestiones relacionadas