2013-10-23 52 views
0

我需要找到希伯来语之间的差异(从右至左读)的句子,如查找字符代码在UTF-8字符串差异PHP

胸罩֖它BR֣一个ALH֑的IM֥牛逼HSM֖IM和A֥吨公顷ֽRTZ: (带的cantillation引号),

起初,神创造了天地和哈茨: (没有的cantillation引号)。

它可能不会给你看看大不相同,但一个希伯来读者将能够看到在第一阶段中的cantillation标记。

这也可能是多余的小点(元音)并不总是在两种文本相同的情况。

所以我需要检查PHP的UTF-8编码的文本,并强调以某种方式不同的方式,让我可以对别人说的“善”下你缺少的05AD Unicode字符的第一个字'Dehi'。

+0

嘛 - 是不是那么只是比较字符串和突出的区别? 我不认为我会得到什么,你实际上是在要求? –

+0

@ AllanS.Hansen的问题是我如何提取的字符基础上UTF-8字符的差异。 – McGafter

回答

1
$str1 = 'בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃'; 
$str2 = 'בְּרֵאשִׁית בָּרָא אֱלֹהִים אֵת הַשָּׁמַיִם וְאֵת הָאָרֶץ'; 

$len1 = mb_strlen($str1, 'utf-8'); 
for($i = 0, $arr1 = array(); $i < $len1; $i++) { 
    $char = mb_substr($str1, $i, 1, 'utf-8'); 
    if (preg_match('/[\x{0591}-\x{05c7}]/u', $char)) { 
     end($arr1); 
     $key = key($arr1); 
     $arr1[$key] = $arr1[$key] . $char; 
    } else if (preg_match('/\p{Zs}/u', $char)) { 
     continue; 
    } else { 
     $arr1[$i] = $char; 
    } 
} 
ksort($arr1); 
$arr1 = array_values($arr1); 

$len2 = mb_strlen($str2, 'utf-8'); 
for($i = 0, $arr2 = array(); $i < $len2; $i++) { 
    $char = mb_substr($str2, $i, 1, 'utf-8'); 
    if (preg_match('/[\x{0591}-\x{05c7}]/u', $char)) { 
     end($arr2); 
     $key = key($arr2); 
     $arr2[$key] = $arr2[$key] . $char; 
    } else if (preg_match('/\p{Zs}/u', $char)) { 
     continue; 
    } else { 
     $arr2[$i] = $char; 
    } 
} 
ksort($arr2); 
$arr2 = array_values($arr2); 

$results = array(); 
foreach ($arr1 as $key => $value) { 
    if ($value != $arr2[$key]) { 
     $results[$key] = $value; 
    } 
} 

我知道了,其结果示出

array (size=8) 
    3 => string 'שִׁ֖' (length=8) 
    7 => string 'רָ֣' (length=6) 
    11 => string 'הִ֑' (length=6) 
    14 => string 'אֵ֥' (length=6) 
    18 => string 'מַ֖' (length=6) 
    22 => string 'אֵ֥' (length=6) 
    25 => string 'אָֽ' (length=6) 
    27 => string 'ץ׃' (length=4) 

3,7,11,14,18,22,25,27日字符是不同的(由右至左计数,并且从0);

+0

这可能是由于我在这个问题提到的这些点点额外的cantillation痕迹。他们应该在仔细检查,看起来有点不同。 – McGafter

+1

所以2的cantillation马克+ 1个正常字符= 1个希伯来语字符? – nut

+0

基本上有三个组成部分上面的文本的信件。实际的信,上面两个短语找到了额外的点和线(元音)。只有在最高的短语找到的cantillation痕迹。说一口流利的希伯来语扬声器就真的只需要字母读它,但其他两个组件是有方便准确的阅读和帮助沿着在必要的读者。 – McGafter