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


convert arabic string to utf8 encoded url

让我们假设我有一个字符串,如下所示:اح我想用下面的函数调用将其转换为seo友好的url,删除斜杠和特殊字符

$title = trim(strtolower($str));  
$title = preg_replace('#[^a-z0-9's-]#',null, $title); 
$title = preg_replace('#['s-]+#','-', $title); 

在英语中,它工作良好,给出了正确的结果,但在阿拉伯语中,它给出了以下结果:15731589160415751581-157315891604 15751581

提前感谢

我建议urlencode()具有唯一的post-id,如

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

这是一个尚未解决的问题。你基本上要做的是将任何给定的字符(如果是阿拉伯语、中文、日语或其他什么都不相关)音译为拉丁语,然后对其执行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空白。

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

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

试试这个函数。我总是用它,而且效果很好!

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 ;
}