嗨,我正在尝试做一个搜索引擎优化友好的网址使用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/