检测希伯来文字符在PHP中的字符串
问题描述:
在PHP中,有一个已知的安全/可靠的方式来检测希伯来文字符在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?
理论上我知道我可以扫描字符串the hebrew UTF-8 range中的字符并检测这些字符,但是字符串对字符串编码的工作原理在PHP中一直对我有点模糊,如果存在这样的情况,我宁愿使用经过验证/已知的解决方案。
答
mb_ereg_replace_callback function对您的情况很有用。 regular expression dialect支持命名属性,希伯来文特性。那就是Hewbrew Unicode block(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中使用这个小代码来做到这一点。
确保字符串是UTF-8编码,然后处理unicode属性。您也可以先将其归一化。 – hakre
感谢您的时间/关注@hakre - 这就是我所得到的东西*理论上我知道我可以扫描字符串以查找希伯来语UTF-8范围内的字符并检测这些*。然而,由于那些闻名于未知未知数的任务之一,我更喜欢一些经过验证的科学,然后再去创造另一个车轮。 –
我给你留下了一个答案,这可以通过mb_ *函数族完成。 Unicode支持正在运行,您应该提供编码为UTF-8的字符串。使用preg_match验证字符串是否正确地使用UTF-8编码,mb_ereg_ *有无效UTF-8的问题(没有将其检测为无效)。 – hakre