Php 将阿拉伯语字符串转换为utf8编码的url
假设我有一个字符串,如下所示: إصلاح إصلاح 我想将其转换为seo友好的url,通过以下函数调用删除斜杠和特殊字符Php 将阿拉伯语字符串转换为utf8编码的url,php,regex,Php,Regex,假设我有一个字符串,如下所示: إصلاح إصلاح 我想将其转换为seo友好的url,通过以下函数调用删除斜杠和特殊字符 $title = trim(strtolower($str)); $title = preg_replace('#[^a-z0-9\s-]#',null, $title); $title = preg_replace('#[\s-]+#','-', $title); 在英语中,其工作良好,结果正确,但在阿拉伯语中,其结果如下: 1573158916041575
$title = trim(strtolower($str));
$title = preg_replace('#[^a-z0-9\s-]#',null, $title);
$title = preg_replace('#[\s-]+#','-', $title);
在英语中,其工作良好,结果正确,但在阿拉伯语中,其结果如下:
15731589160415751581-15731589160415751581
提前感谢我建议
urlencode()
使用唯一的帖子id,如
/blog/12345-<?= urlencode('إصلاح إصلاح') ?>
/blog/12345-
阿拉伯语字母的unicode属性是:\p{arabic}
,将第二个preg_替换为:
$title = preg_replace('#[^\p{arabic}\s-]#',null, $title);
这是一个尚未解决的问题。基本上,你需要做的是将任何给定的字符(如果是阿拉伯语、汉语、日语或其他什么都不相关)翻译成拉丁语,然后对其执行URI生成方法 iconv对此有一些基本的(!)支持,请看,您必须使用
iconv('UTF-8',ISO-8859-1//TRANSLIT//IGNORE',$text)
,但正如我所说,支持是有限的
如果我是你,我会删除空格等,然后调用urlencode()
:
$url = urlencode(mb_ereg_replace('\s+', '-', $url));
我使用的是
mb_ereg_replace()
,因为它支持unicode,这样也会替换unicode空格。试试这个函数。我总是用它,它工作得很好
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 ;
}
? 这是针对5.4的,但对5.2/5.3的效果相同。您尝试过阿拉伯语字符吗?我使用了您发布的字符。对于urlencode空格和特殊字符,不会删除,我想删除它们OK。然后,您必须创建另一个函数-要将阿拉伯语字符串转换为拉丁语音译,请选中以下内容:警告:preg_replace():编译失败:在/usr/share/nginx/html/url.php的偏移量11处的\P或\P之后出现未知的属性名34@user1268911:可能是版本问题,请参阅:
$url=preg_replace('#\s+#u','-',$url)
是否启用了支持UTF-8的PCRE。您是否可以查看此网站并查看他的链接@rodneyrehm,但PCRE中\s所匹配的内容并不是很明确。查看手册页,默认情况下,它执行isspace()
检查,对于空格、换行符、换行符、回车符、水平制表符和垂直制表符都是如此。@rodneyrehm您在IE9上尝试过吗