我想让php转换这个......
Text : الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ
converted to : الحمد لله رب العالمين
我不知道从哪里开始以及如何做到这一点。绝对不知道。我做了一些研究,找到了这个链接http://www.suhailkaleem.com/2009/08/26/remove-diacritics-from-arabic-text-quran/,但它没有使用php。我想使用php并将上面的文本转换为转换后的文本。我想从用户输入的阿拉伯语文本中删除任何变音符号
答案 0 :(得分:10)
阿拉伯语中的元音变音符号为combining characters,这意味着只需简单搜索这些就足够了。对于每个可能的元音,没有必要对每个可能的元音都有替换规则,这有点单调乏味。
这是一个可以输出所需内容的工作示例:
header('Content-Type: text/html; charset=utf-8', true);
$string = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';
$remove = array('ِ', 'ُ', 'ٓ', 'ٰ', 'ْ', 'ٌ', 'ٍ', 'ً', 'ّ', 'َ');
$string = str_replace($remove, '', $string);
echo $string; // outputs الحمد لله رب العالمين
这里重要的是$remove
数组。它看起来很奇怪,因为'
引号之间存在组合字符,因此它会修改其中一个单引号。这可能需要保存与文本相同的字符编码。
答案 1 :(得分:2)
试试这个:
$string = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';
$string = preg_replace("~[\x{064B}-\x{065B}]~u", "", $string);
echo $string; // outputs الحمد لله رب العالمين
答案 2 :(得分:0)
我不是阿拉伯语,但我认为你可以重新制作一些字母:
function remap($string) {
$remap = [
'ą' => 'a',
'č' => 'c',
/* ... Arabic alphabet remap */
];
return str_replace(array_keys($remap), $remap, $string);
}
echo remap('ąčasdadfg'); // => acasdadfg
答案 3 :(得分:0)
尝试此代码,效果很好:
$unicode = [
"~[\x{0600}-\x{061F}]~u",
"~[\x{063B}-\x{063F}]~u",
"~[\x{064B}-\x{065E}]~u",
"~[\x{066A}-\x{06FF}]~u",
];
$str = preg_replace($unicode, "", $str);