将阿拉伯字符串转换为utf8编码的url

时间:2012-03-14 12:16:56

标签: php regex

假设我有一个字符串如下: إصلاحإصلاح 我想通过以下函数调用

将其转换为seo friendly url删除斜杠和特殊字符
$title = trim(strtolower($str));  
$title = preg_replace('#[^a-z0-9\s-]#',null, $title); 
$title = preg_replace('#[\s-]+#','-', $title); 

在英语中它的工作正常并且给出了正确的结果,但在阿拉伯语中它给出了以下结果: 15731589160415751581-15731589160415751581

提前致谢

4 个答案:

答案 0 :(得分:3)

我建议urlencode()使用唯一的帖子ID,例如

/blog/12345-<?= urlencode('إصلاح إصلاح') ?>

答案 1 :(得分:2)

这还是一个未解决的问题。你基本上要做的是将任何给定的字符(如果是阿拉伯语或中文或日语或其他什么不相关)音译为拉丁语转录,然后在其上执行URI生成方法。

iconv中有一些基本的(!)支持,看看http://ch.php.net/manual/de/function.iconv.php,你必须使用iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $text),但正如我所说,支持是有限的。

如果我是你,我会删除空格等,然后打电话给urlencode()

$url = urlencode(mb_ereg_replace('\s+', '-', $url));

我正在使用mb_ereg_replace(),因为它具有unicode感知功能,因此也会替换unicode空格。

答案 2 :(得分:1)

阿拉伯语字母的unicode属性为:\p{arabic},将第二个preg_replace更改为:

$title = preg_replace('#[^\p{arabic}\s-]#',null, $title); 

答案 3 :(得分:1)

尝试此功能。我总是使用它而且效果很好!

function SafeUrl3($str) {
    $friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false) ;
    $friendlyURL = preg_replace ( "/[^أ-يa-zA-Z0-9_.-]/u", "-", $friendlyURL ) ;
    $friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8") ;
    $friendlyURL = trim($friendlyURL, '-') ;

    return $friendlyURL ;
}