Je veux être en mesure de détecter (en utilisant des expressions régulières) si une chaîne contient des caractères hébreux à la fois utf8 et iso8859-8 dans le langage de programmation PHP. Merci!comment puis-je détecter les caractères hébreux à la fois iso8859-8 et utf8 dans une chaîne en utilisant php
Répondre
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);
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 ...
Comment un personnage a ord (char $)> 255 dans la norme ISO-8859-8? C'est un seul octet! –
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
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 ;-) –
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 :)
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
function is_hebrew($string)
{
return preg_match("/\p{Hebrew}/u", $string);
}
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
@gnud: Voilà pourquoi vous ne devriez pas utiliser l'expression rationnelle iso8859-8 sur les chaînes UTF-8 – Andomar