检测 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?

从理论上讲,我知道我可以扫描字符串以查找希伯来语 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);

最新更新