2017-06-17 155 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中使用这个小代码来做到这一点。