Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将阿拉伯语字符串转换为utf8编码的url_Php_Regex - Fatal编程技术网

Php 将阿拉伯语字符串转换为utf8编码的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

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

$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上尝试过吗