假设我有一个字符串如下: إصلاحإصلاح 我想通过以下函数调用
将其转换为seo friendly url删除斜杠和特殊字符$title = trim(strtolower($str));
$title = preg_replace('#[^a-z0-9\s-]#',null, $title);
$title = preg_replace('#[\s-]+#','-', $title);
在英语中它的工作正常并且给出了正确的结果,但在阿拉伯语中它给出了以下结果: 15731589160415751581-15731589160415751581
提前致谢
答案 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 ;
}