删除阿拉伯语Diacritic

时间:2014-08-29 06:46:45

标签: php arabic diacritics

我想让php转换这个......

Text : الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ
converted to : الحمد لله رب العالمين 

我不知道从哪里开始以及如何做到这一点。绝对不知道。我做了一些研究,找到了这个链接http://www.suhailkaleem.com/2009/08/26/remove-diacritics-from-arabic-text-quran/,但它没有使用php。我想使用php并将上面的文本转换为转换后的文本。我想从用户输入的阿拉伯语文本中删除任何变音符号

4 个答案:

答案 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); 

Arabic unicode