2009-11-07 36 views

回答

14

这里是map of the iso8859-8 character set。范围E0 - FA似乎是保留给希伯来文的。您可以为您在字符类这些字符:

[\xE0-\xFA] 

为UTF-8,range reserved for Hebrew似乎是0591至05F4。所以,你可以检测与:

[\u0591-\u05F4] 

这里有一个正则表达式匹配的PHP的例子:

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

问题是E0-FA也会以UTF-8的形式出现,但不会像nebrew字符那样运行...... – gnud

+0

@gnud:这就是为什么你不应该使用UTF-8字符串上的iso8859-8正则表达式 – Andomar

0

首先,这样的字符串将完全无用 - 两种不同字符集的混合?

iso8859-8中的希伯来语字符和UTF-8中的多字节序列的每个字节的值均为ord($char) > 127。所以我会做的是找到所有字节值大于127,然后检查它们是否有意义,如is8859-8,或者如果你认为他们会更有意义的UTF8序列...

+0

一个角色怎么能有ORD($字符)> 255 ISO-8859-8?这是一个字节! –

+0

很好。我不知道为什么,但我完全搞砸了 - 非ascii介于128和255之间 - 现在已经修复。 – gnud

+0

我想那是你同时的意思。你真幸运,我在等你投降之前等着你;-) –

1

这里的一个小功能来检查字符串的第一个字符是否是希伯来文:

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

好运:)

3

好,如果你的PHP文件进行编码,UTF-8应该是个例你在里面有希伯来语,你应该使用以下至REGx:

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