我想了解我应该如何处理 URLs
中的字符,这是因为我正在构建一个网站,用户可以在其中存储内容并通过在 URL
中将其名称数字化来转到内容页面。 .
所以,类似于 Wikipedia
或 Last.FM
网站。
我在网站上看到,用户可以这样写
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentemøller</a>
并且可以到达艺术家的页面。
页面加载后,如果我复制 URL,我会看到写成:
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentemøller</a>
但如果我将它粘贴到文本编辑器中,它将被粘贴为
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentem%C3%B8ller</a>
所以字符 ø
粘贴为 %C3%B8
当然对于这样的URL也是一样的(画师小林武的页面)
<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://www.last.fm/music/小林武史</a>
<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2</a>
如果我对第一个或第二个数字进行数字化,该页面在任何情况下都可以正常工作,为什么?
我想我应该对 .htacces
做些什么和 mod_rewrite
但我不确定,特殊字符是否自动转换为 url 特殊字符?
然后,我该怎么做才能让 PHP 对内容名称进行正确的查询?
如果我有一张像这样的 table
table_users
- username
- age
- height
- weight
- sex
- email
- country
我可以 mod_rewrite
写一个像 <a href="http://mysite.com/user/bob" rel="noreferrer noopener nofollow">http://mysite.com/user/bob</a>
这样的地址得到username
鲍勃来自 table_users
但是<a href="http://mysite.com/user/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://mysite.com/user/小林武史</a>
呢? ?
这里我展示了一个我想做的简单例子:
#.htaccess
RewriteEngine On
RewriteRule ^(user/)([a-zA-Z0-9_+-]+)([/]?)$ user.php?username=$2
<?php
// this is the page user.php
// this is the way I use to get the url value
print $_REQUEST["username"];
?>
这行得通,但它仅限于 [a-zA-Z0-9_+-],如何像其他字符一样与所有字符更兼容而又不会损失太多安全性?
有人知道避免麻烦的方法吗?
最佳答案
试试 urlencode 和 urldecode
编辑:
下面是url编解码的直观描述
http://blog.neraliu.com/wp-content/uploads/2009/10/url-encoding.png
关于php - 如何处理像 Last.FM 或维基百科这样的社区 URL 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128756/