And*_*rew 4 php mysql unicode arabic
我有一个MySQL数据库,其中包括英语和阿拉伯语的书籍标题,我使用的PHP类可以自动将阿拉伯语文本音译为拉丁文.
我希望我的输出HTML看起来像这样:
<h3>A book</h3>
<h3>???? <em>(kitaab)</em></h3>
<h3>Another book</h3>
Run Code Online (Sandbox Code Playgroud)
有没有办法让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>";
}
...
}
Run Code Online (Sandbox Code Playgroud)
幸运的是,当输入拉丁字符时,类不会窒息,所以理论上我可以通过转换发送每个结果,但这似乎是浪费处理.
谢谢!
编辑: 我还没有找到检查字形或字符的方法.我想我可以将所有阿拉伯字符放在一个数组中,并检查数组中的任何内容是否与字符串的一部分匹配...
但是,我确实找到了一个可能最终工作正常的临时解决方案.无论语言如何,它都会通过转换放置每个标题,但只有在字符串发生更改时才输出括号音译:
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>";
}
Run Code Online (Sandbox Code Playgroud)
这应该这样做:
preg_match("/\p{Arabic}/u", $item['item_title'])
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以使正则表达式更复杂,但我认为你真的不需要.
该\p转义序列,您可以根据自己的Unicode属性(当选择字符u模式修改时).
PHP手册提到:"PCRE不支持"希腊语"或"InMusicalSymbols"等扩展属性." 但那不再完全正确.PCRE 6.5版增加了对脚本名称的支持.
| 归档时间: |
|
| 查看次数: |
4020 次 |
| 最近记录: |