一尘不染

根据PHP中的字形检查字符串的语言

mysql

我有一个包含英文和阿拉伯文书籍标题的MySQL数据库,并且我使用的是PHP类该类可以自动将阿拉伯文本音译为拉丁文字。

我希望我的输出HTML看起来像这样:

<h3>A book</h3>
<h3>كتاب <em>(kitaab)</em></h3>
<h3>Another book</h3>

PHP是否可以根据其中使用的Unicode字符和字形来确定字符串的语言?我试图得到这样的东西:

$Ar = new Arabic('EnTransliteration');
while ($item = mysql_fetch_array($results)) {
    ...
    if (some test to see if $item['item_title'] has Arabic glyphs in it) {
      echo "<h3>$item[item_title] <em>(" . $Ar->ar2en($item['item_title']) . ")</em></h3>";
    } else {
      echo "<h3>$item[item_title]</h3>";
    }
    ...
}

幸运的是,该类在输入拉丁字符时不会阻塞,因此从理论上讲我可以通过转换发送每个结果,但这似乎浪费了处理时间。

谢谢!

编辑: 我仍然没有找到一种方法来检查字形或字符。我想我可以将所有阿拉伯字符放在一个数组中,并检查数组中是否有任何匹配字符串的部分…

但是,我确实找到了一个最终可能会很好用的临时解决方案。它使每个标题都通过转换,而与语言无关,但是如果更改了字符串,则仅输出带括号的音译:

while ($item = mysql_fetch_array($mysql_results)) {
    $transliterate = trim(strtolower($Ar->ar2en($item['item_title'])));
    $item_title = (strtolower($item['item_title']) == $transliterate) ? $item['item_title'] : $item['item_title'] . " <em>($transliterate)</em>";

    echo "<h3>$item_title</h3>";
}

阅读 245

收藏
2020-05-17

共1个答案

一尘不染

应该这样做:

preg_match("/\p{Arabic}/u", $item['item_title'])

如果需要,可以使该正则表达式复杂一些,但我认为您确实不需要。

\p转义序列,您可以根据自己的Unicode属性选择字符(当u模式修改时)。

PHP手册中提到:“ PCRE不支持扩展属性,例如“希腊语”或“ InMusicalSymbols”。但这不再是完全正确的。PCRE
6.5版增加了对脚本名称的支持

2020-05-17