用于阿拉伯语编码字符的PHP URL重写模式

时间:2012-06-26 14:51:13

标签: php url-rewriting arabic

主题与阿拉伯语编码字符的URL重写模式有关。 我们想要使用PHP / MYSQL为每个插入数据库的标题创建一个标题重写,在英文的情况下,每件事情都是正确的,使用下面的函数:

$rlink =preg_replace ('/ /i', '-', $link);
$rlink2 =preg_replace ('/[^a-z0-9\-]/i', '', $rlink);
$rlink2 =preg_replace ('/--/i', '-', $rlink2);
return $rlink2;

此功能不能用于阿拉伯字符,它会将所有字符排除在(a-z)之外,因此无法使用。

如何继续使用PHP / MYSQL在网址中使用阿拉伯语标题,如下所示: http://localhost/html/test/الصفحة-الرئيسية/

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

您需要将您的字符集指定为UTF-8才能存储阿拉伯字符,因此在将记录插入数据库之前尝试将这些行添加到您的php中(假设您运行的是mysql)

mysql_query('SET character_set_results=utf8');
mysql_query('SET names=utf8');
mysql_query('SET character_set_results=utf8');

此外,还有一些其他问题可以解决类似的问题,请查看:

How to make MySQL handle UTF-8 properly

setting utf8 with mysql through php

PHP/MySQL with encoding problems

Storing and displaying unicode string (हिन्दी) using PHP and MySQL

编辑:我可能误解了这个问题,您是否尝试重写物理URL以使用阿拉伯字符或将URL存储在MySql中?

答案 1 :(得分:0)

您可以使用unicode字符类。

http://www.php.net/manual/en/regexp.reference.unicode.php

允许您为其属性匹配unicode字符,例如是一个字母,数字或标点符号

所以你的行:

$rlink2 = preg_replace ('/[^a-z0-9\-]/i', '', $rlink);

会变成:

$rlink2 = preg_replace ('/[^\pL\pN\-]/i', '', $rlink);

其中\ pL表示搜索任何字母的“L”类,\ pN表示搜索任何数字的“N”类。

我不是阿拉伯语的演讲者,但我很确定你还需要至少包含一个其他课程,以便在连接器和其他用于将阿拉伯字母加入单词的字母上进行匹配,因为那些赢了被归类为字母,但将是某种形式的标点符号。

一旦你提取了正则表达式,只要你的MySQL被设置为使用UTF8就应该是你所需要的。