嗨,我正在尝试做一个搜索引擎优化友好的网址使用php。我正在使用下面的代码来转换url,比如exapmle.com/post/hi-how-are-you并使用这个.htaccess代码

RewriteRule ^post/([\w-]+)/?$ single_post.php?blog_title=$1 [L,QSA]

php slug url
function url_slug($str) {
    $str = mb_strtolower(trim($str), 'UTF-8');
    $str = preg_replace('/[[:^alnum:]]/iu', ' ', $str);
    $str = trim($str);
    $str = preg_replace('/\s+/', '-', $str);
    return $str;
}

但问题是个性。例如:当我发布一些turkih字符(tırda birĝnçokıktı)时,url看起来是这样的
example.com/post/tırda-bir-öğün-çok-çıktı

对于slug来说一切都很好,但是当我打开url时,我无法获得任何数据(tırda birënçokıktı)。
我需要做什么才能打开带有特殊字符的url?
我们有机会用英语打印所有特殊字符吗?例如,当我从数据中发布内容时,url_slug可以将特殊字符更改为英文字符,例如:
tırda bir öğün çok çıktı

转换后的英文字符
tirda-bir-ogun-cok-cikti

最佳答案

\w只匹配word char[a-zA-Z0-9_]的单词字符,不包括所有unicode字符。
将规则更改为:

RewriteRule ^post/([^/]+)/?$ single_post.php?blog_title=$1 [L,QSA]

[^/]+将匹配任何不/的字符,包括unicode字符。
您还可以稍微调整一下php代码:
function url_slug($str) {
    $str = mb_strtolower(trim($str), 'UTF-8');
    $str = preg_replace('/[^\pL\pN]+/u', ' ', $str);
    $str = trim($str);
    $str = preg_replace('/\h+/', '-', $str);
    return $str;
}

关于php - 我需要做什么才能打开带有特殊字符的URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49675246/

10-11 02:50
查看更多