2017-06-17 151 views
1

在PHP中,有一個已知的安全/可靠的方式來檢測希伯來文字符在PHP中的字符串

  1. 檢測,一般,希伯來文字符是在純英文字符的字符串。
  2. 替換字符的東西

我知道我可以,一組特定的字符,請使用mb_ereg_replace替換特定的字符。但是,我有興趣能夠掃描可能包含任何希伯來字符的字符串,然後將其替換爲東西。

也就是說,我可能有兩個字符串這樣

<?php 
    $string1 = "Look at this hebrew character: חַ. Isn't it great?"; 
    $string2 = "Look at this other hebrew character: יַָ. It is also great?"; 

我希望有一個單一的功能,這將使我下面的字符串

Look at this hebrew character: \texthebrew{ח}. Isn't it great? 
Look at this other hebrew character: \texthebrew{י}. It is also great? 

理論上我知道我可以掃描字符串the hebrew UTF-8 range中的字符並檢測這些字符,但是字符串對字符串編碼的工作原理在PHP中一直對我有點模糊,如果存在這樣的情況,我寧願使用經過驗證/已知的解決方案。

+1

確保字符串是UTF-8編碼,然後處理unicode屬性。您也可以先將其歸一化。 – hakre

+0

感謝您的時間/關注@hakre - 這就是我所得到的東西*理論上我知道我可以掃描字符串以查找希伯來語UTF-8範圍內的字符並檢測這些*。然而,由於那些聞名於未知未知數的任務之一,我更喜歡一些經過驗證的科學,然後再去創造另一個車輪。 –

+0

我給你留下了一個答案,這可以通過mb_ *函數族完成。 Unicode支持正在運行,您應該提供編碼爲UTF-8的字符串。使用preg_match驗證字符串是否正確地使用UTF-8編碼,mb_ereg_ *有無效UTF-8的問題(沒有將其檢測爲無效)。 – hakre

回答

2

mb_ereg_replace_callback function對您的情況很有用。 regular expression dialect支持命名屬性,希伯來文特性。那就是Hewbrew Unicode blockIntlChar::BLOCK_CODE_HEBREW)。

所有你需要做的是掩蓋希伯來語段:

mbregex_encoding('utf-8'); 
var_dump(mb_ereg_replace_callback('\p{Hebrew}+', function($matches) { 
    return vsprintf('\texthebrew{%s}', $matches); 
}, $subject)); 

輸出:

string(65) "Look at this hebrew character: \texthebrew{חַ}. Isn't it great?" 

由於輸出顯示,兩個碼點的四個字節妥善包裹在一段。

我不知道任何其他方式在PHP中使用這個小代碼來做到這一點。