我有一个包含英文和阿拉伯文书籍标题的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>"; }
应该这样做:
preg_match("/\p{Arabic}/u", $item['item_title'])
如果需要,可以使该正则表达式复杂一些,但我认为您确实不需要。
该\p转义序列,您可以根据自己的Unicode属性选择字符(当u模式修改时)。
\p
u
PHP手册中提到:“ PCRE不支持扩展属性,例如“希腊语”或“ InMusicalSymbols”。但这不再是完全正确的。PCRE 6.5版增加了对脚本名称的支持。