2013-10-23 53 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