在PHP中,是否有一种已知的安全/可靠的方法
- 通常检测一串普通英语字符中的希伯来语字符。
- 将该字符替换为某些字符
我知道对于一组特定字符,我可以使用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?
从理论上讲,我知道我可以扫描字符串以查找希伯来语 UTF-8 范围内的字符并检测这些字符,但是字符串上的字符编码在 PHP 中的工作方式对我来说一直有点模糊,如果存在这样的事情,我宁愿使用经过验证/已知的解决方案。
mb_ereg_replace_callback函数在您的情况下很有用。正则表达式方言支持命名属性,特别是希伯来属性。那就是Hewbrew Unicode块(IntlChar::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 中做到这一点。
若要检测字符串是否包含希伯来语文本,请使用布尔函数mb_ereg_match:
mb_ereg_match('p{Hebrew}+', $stringtosearch);