您好,我正在尝试使用 php 制作一个 seo 友好的 url。我正在使用以下代码将 url 转换为 exapmle.com/post/hi-how-are-you
并使用此 .htaccess 代码
RewriteRule ^post/([\w-]+)/?$ single_post.php?blog_title=$1 [L,QSA]
php 别名 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;
}
但问题是特殊字符。例如:当我发布一些像 (tırda bir öğün çok çıktı) 这样的 turkih 字符时,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
仅匹配单词字符为 [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/