让我们假设我有一个字符串,如下所示:اح我想用下面的函数调用将其转换为seo友好的url,删除斜杠和特殊字符
$title = trim(strtolower($str));
$title = preg_replace('#[^a-z0-9s-]#',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 ;
}