您好我正在尝试使用php制作一个seo友好的网址。我正在使用以下代码转换网址-i
并使用此.htaccess代码
exapmle.com/post/hi-how-are-you
php slug url
RewriteRule ^post/([\w-]+)/?$ single_post.php?blog_title=$1 [L,QSA]
但问题是特殊性。例如:当我发布一些turkih字符像(tırdabiröğünçokçıktı)时,网址看起来像这样
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ı)获取任何数据。
打开包含特殊字符的网址需要做些什么?
我们是否有机会用英语打印所有特殊字符?就像我从数据中发布内容时,url_slug可以将特殊字符更改为英文字符,例如:
example.com/post/tırda-bir-öğün-çok-çıktı
转换后的英文字符
tırda bir öğün çok çıktı
答案 0 :(得分:1)
\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;
}
答案 1 :(得分:0)
最常见的方法是使用一些映射,其中您将非拉丁字母作为键和拉丁字母表示:
$map = [
'š' => 'sh',
...
];
然后你使用replace:
str_replace(array_keys($map), array_values($map), $slug);
另一种方法是使用iconv
函数:
iconv('UTF-8', 'ASCII//TRANSLIT', $slug);