2009-11-07 8 views

Répondre

14

Voici map of the iso8859-8 character set. La plage E0 - FA semble être réservée à l'hébreu. Vous pouvez vérifier ces caractères dans une classe de caractères:

[\xE0-\xFA] 

Pour UTF-8, le range reserved for Hebrew semble être 0591 à 05F4. Ainsi, vous pouvez détecter avec:

[\u0591-\u05F4] 

Voici un exemple d'un match de regex en PHP:

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

Le problème est que E0-FA sont aussi des valeurs qui apparaîtront en UTF-8, mais pas forcément en caractères hébraïques ... – gnud

+0

@gnud: Voilà pourquoi vous ne devriez pas utiliser l'expression rationnelle iso8859-8 sur les chaînes UTF-8 – Andomar

0

D'abord, une telle chaîne serait complètement inutile - un mélange de deux jeux de caractères différents? Les caractères hébreux dans iso8859-8 et chaque octet de séquences multi-octets dans UTF-8 ont la valeur ord($char) > 127. Donc ce que je ferais, c'est trouver tous les octets avec une valeur supérieure à 127, puis vérifier s'ils ont un sens comme is8859-8, ou si vous pensez qu'ils auraient plus de sens comme une séquence UTF8 ...

+0

Comment un personnage a ord (char $)> 255 dans la norme ISO-8859-8? C'est un seul octet! –

+0

Eh bien, bien. Je ne sais pas pourquoi, mais j'ai complètement foiré que - non-ascii sont entre 128 et 255 - réparé maintenant. – gnud

+0

Je me suis dit que c'était ce que vous vouliez dire entre-temps. Vous avez de la chance d'avoir attendu avant de vous downvoter ;-) –

1

Voici une petite fonction pour vérifier si le premier caractère d'une chaîne est en hebrew:

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. 
     ); 
} 

bonne chance :)

3

bien si votre fichier PHP est codé avec UTF-8 devrait être dans les cas e à vous hebrew en elle, vous devez utiliser la RegX suivante:

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