2014-08-29 106 views
3

我想PHP来转换这个...删除阿拉伯语变音符号

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

我不知道从哪里开始,如何做到这一点。绝对不知道。我已经做了一些研究,发现这个链接http://www.suhailkaleem.com/2009/08/26/remove-diacritics-from-arabic-text-quran/,但它不使用PHP。我想用php和隐藏上面的文本来转换文本。我想删除用户输入阿拉伯文字

+0

为什么不知道? 'strtr()'或'str_replace()'可以正常工作。所以替换例如是'['''=''''']。它只是不同的符号(带有变音符号而没有) - 就这样。 – 2014-08-29 06:56:14

+1

以下perl正则表达式可以帮我:'$ str = NFD($ str)=〜s/[\ p {Mn}] // rg;'。不应该太难把它变成php。 – a3f 2014-08-30 20:45:05

+0

@ a3f我会试试看。谢谢 – 2014-09-01 10:43:13

回答

7

在阿拉伯语中的元音变音符号是combining characters,这意味着简单的搜索这些应该就足够了。对于每个可能的元音都没有必要为每个可能的辅音制定一个替换规则,这有点乏味。

这里有一个工作示例输出你需要:

header('Content-Type: text/html; charset=utf-8', true); 
$string = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ'; 

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

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

这里的关键是$remove阵列。它看起来很奇怪,因为'报价之间有一个组合字符,所以它修改了其中一个单引号。这可能需要使用与文本相同的字符编码进行保存。

+0

谢谢,这个作品像任何东西:) – 2014-08-29 07:11:00

+0

@SyedSajid很高兴听到它!注意 – ljacqu 2014-08-29 07:11:15

+0

对于在阿拉伯语键盘中输入变音符号,您可以在Windows编辑器中直接输入变音符号或使用Alt +(输入变音符号代码)来使用这个Asci代码(这些代码是Asci不是Unicode),这是代码 (0243 )(0246)(0245)(0240)(0242)(0241)(0250)(0248)(0220) – ganji 2014-11-08 11:59:30

0

任何变音我不说阿拉伯语,但我想你可以做一些字母重新映射:

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

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

快速查看显示阿拉伯文有80个变音符号和26个字母。太多的组合,使一个简单的str_replace可行。 – a3f 2014-08-29 07:07:09