去除阿拉伯语变音符号

22

我希望 PHP 能将这个转换...

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

我不确定应该从哪里开始,也不知道怎么做。毫无头绪。我做了一些研究,找到了这个链接http://www.suhailkaleem.com/2009/08/26/remove-diacritics-from-arabic-text-quran/,但它不使用php。我想使用php将上述文本转换为已转换的文本。我希望删除用户输入的阿拉伯文本中的任何变音符号。


为什么没有想法?strtr()str_replace()都可以很好地工作。所以替换将是['نَ'<='ن'],例如。这只是不同的符号(带有和不带有变音符号)-就是这样。 - Alma Do
1
以下的 Perl 正则表达式对我来说很好用:$str = NFD($str) =~ s/[\p{Mn}]//rg;。将其转换为 PHP 应该不难。 - a3f
@a3f 我会尝试的。谢谢。 - Syed Sajid
4个回答

19
阿拉伯语中的元音变音符号是组合字符,这意味着只需简单搜索即可。没有必要为每个可能的辅音和每个可能的元音制定替换规则,这有点繁琐。
以下是一个可行的示例,输出所需内容:
header('Content-Type: text/html; charset=utf-8', true);
$string = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';

$remove = array('ِ', 'ُ', 'ٓ', 'ٰ', 'ْ', 'ٌ', 'ٍ', 'ً', 'ّ', 'َ');
$string = str_replace($remove, '', $string);

echo $string; // outputs الحمد لله رب العالمين

重要的是$remove数组。它看起来很奇怪,因为在单引号之间有一个组合字符,所以它修改了其中一个单引号。这可能需要使用与您的文本相同的字符编码保存。

@SyedSajid 很高兴听到这个消息!保重 - ljacqu
要在阿拉伯键盘上输入变音符号,您可以在Windows编辑器中直接输入或按住Alt +(输入变音符号的代码)使用这些Asci代码(这些代码是Asci而不是Unicode)。以下是这些代码:ـَ(0243) ـِ(0246) ـُ(0245) ـً(0240) ـٍ(0242) ـٌ(0241) ـْ(0250) ـّ(0248) ـ ـ(0220) - ganji

8

试试这个:

$string = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';
$string = preg_replace("~[\x{064B}-\x{065B}]~u", "", $string);
echo $string; // outputs الحمد لله رب العالمين

3

尝试使用这段代码,它可以正常工作:

<?php    
$str = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';

$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);
echo $str;
?>

参见:阿拉伯语Unicode 感谢:Hosein Shahrestani的最初回答。

-2

我不会说阿拉伯语,但我认为你可以进行一些字母重映射:

function remap($string) {
    $remap = [
        'ą' => 'a',
        'č' => 'c',
        /* ... Arabic alphabet remap */
    ];
    return str_replace(array_keys($remap), $remap, $string);
}

echo remap('ąčasdadfg'); // => acasdadfg

一个快速查看就可以发现,阿拉伯语有80个变音符号和26个字母。这太多的组合使得简单的str_replace方法不可行。 - a3f
阿拉伯语有28个基本字母,而不是26个。 - doctorate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接