preg_replace和preg_match阿拉伯字符

时间:2012-08-20 23:18:28

标签: php utf-8 preg-replace preg-match arabic

  

可能重复:
  how to add Arabic letters to url regex

我一直在搜索几个小时没有回答。

你如何在阿拉伯语字符和英语字符上使用preg_replace?

这是我的代码是英文

$string = preg_replace ( "/&([a-zA-Z])(uml|acute|grave|circ|tilde|ring),/", "", $string );
$string = preg_replace ( "/[^a-zA-Z0-9_.-]/", "", $string );

我建议使用此代码的一些答案:

$string = preg_replace ( "/&([أ-يa-zA-Z])(uml|acute|grave|circ|tilde|ring),/u", "", $string );
$string = preg_replace ( "/[^أ-يa-zA-Z0-9_.-]/u", "", $string );

我测试了它并且它有效。但这实际上是PHP的功能吗?它包括所有阿拉伯字符吗?是否有更好的方式来包括所有阿拉伯字符?

我要对代码做的是:

将字符串中的所有字符替换为有效的SEO友好字符。

我使用基于http://www.unicodemap.org的代码解决了这个问题。谢谢布莱恩。

$string = preg_replace ( "/&([\x{0600}-\x{06FF}a-zA-Z])(uml|acute|grave|circ|tilde|ring),/u", "", $string );
    $string = preg_replace ( "/[^\x{0600}-\x{06FF}a-zA-Z0-9_.-]/u", "", $string );

2 个答案:

答案 0 :(得分:5)

unicode character map是一个可视化字符组的好地方,包括阿拉伯语字符串的第一部分为您[أ-يa-zA-Z]分组

如果您仍然不确定,请在regular expressions上阅读更多内容。

答案 1 :(得分:1)

我在你的范围内看到的是,你有[أ-ي],我知道右边的那个是阿拉伯语A,第一个字母。我不熟悉第一个,但我想它就像最后一个角色。如果是这种情况,因为PHP语言是英语,您可能希望将范围的方向改为[ي-أ]

另外,对于规范化,我会使用Unicode字符范围,就像Bryan建议的那样。