4

我有一个 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>";
}
4

2 回答 2

6

这应该这样做:

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

如果你愿意,你可以让这个正则表达式更复杂一点,但我认为你真的不需要。

\p转义序列允许您根据Unicode 属性选择字符(使用u模式修饰符时)。

PHP 手册提到:“PCRE 不支持“Greek”或“InMusicalSymbols”等扩展属性。但这不再完全正确。PCRE 6.5 版增加了对脚本名称的支持

于 2009-06-20T15:02:02.197 回答
0

这是一个用于阿拉伯语字符集自动检测的 PHP 开源类:

http://www.ar-php.com/php/arabic/index.html#ArCharsetD

于 2009-06-18T09:57:02.850 回答