我需要做啥才能打开带有特殊字符的 URL
Posted
技术标签:
【中文标题】我需要做啥才能打开带有特殊字符的 URL【英文标题】:What I need to do in order to open URLs with special characters我需要做什么才能打开带有特殊字符的 URL 【发布时间】:2018-09-15 10:42:42 【问题描述】:您好,我正在尝试使用 php 制作一个对 seo 友好的网址。我正在使用以下代码来转换像 exapmle.com/post/hi-how-are-you
这样的 url 并使用这个 .htaccess 代码
RewriteRule ^post/([\w-]+)/?$ single_post.php?blog_title=$1 [L,QSA]
php 蛞蝓网址
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ı) 这样的土耳其字符时,网址看起来像这样
example.com/post/tırda-bir-öğün-çok-çıktı
对于蛞蝓来说一切正常,但是当我打开网址时,我无法使用 (tırda-bir-öğün-çok-çıktı) 获取任何数据。
我需要做什么才能打开带有特殊字符的 URL?
我们有机会用英文打印所有特殊字符吗?就像当我从数据中发布某些内容时,url_slug 可以将特殊字符更改为英文字符,例如:
tırda bir öğün çok çıktı
转换成英文字符
tirda-bir-ogun-cok-cikti
【问题讨论】:
echo 'example.com/post/'.urlencode( 'tırda bir öğün çok çıktı' );
正是为此目的而存在,因此您最终会得到example.com/post/t%C4%B1rda%20bir%20%C3%B6%C4%9F%C3%BCn%20%C3%A7ok%20%C3%A7%C4%B1kt%C4%B1
@MonkeyZeus 实际上它只会对其进行编码,而不是转换为用户友好的。
@MonkeyZeus 那不是用户友好的转换
@Azzo 你要求“seo-friendly”。 Google 应该可以毫无问题地解读您网站上正确编码的链接,因此如果有人实际上在搜索 öğün
,那么他们应该会看到您的文章。将其转换为 ogun
会抵消这种好处。
@Justinas 如果这是真的,那么为什么谷歌搜索 öğün
会产生与 ogun
不同的结果
【参考方案1】:
最常见的方法是使用一些映射,其中非拉丁字母作为键,拉丁字母表示:
$map = [
'š' => 'sh',
...
];
然后你使用替换:
str_replace(array_keys($map), array_values($map), $slug);
另一种方法是使用iconv
函数:
iconv('UTF-8', 'ASCII//TRANSLIT', $slug);
【讨论】:
soiconv('UTF-8', 'ASCII//TRANSLIT', $slug);
转换所有特殊字符?【参考方案2】:
\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 switch 切换页面,文件位于 pages 文件夹中,所以我的问题是如何使用htaccess
获取 url,例如 http://localhost://8888/group/name
。没有组文件夹,我只是不会在 url 中显示组。如果可以,有可能吗?
我已经尝试过这样但一些包含的 php 文件没有显示:RewriteRule ^group/([\w-]+)/?$ sources/group.php?group_username=$1 [L,QSA]
亲爱的我已经从这个链接问了这个问题,你能帮我检查一下吗? HERE
我在等你亲爱的以上是关于我需要做啥才能打开带有特殊字符的 URL的主要内容,如果未能解决你的问题,请参考以下文章