我正在尝试理解我应该如何处理URLs
中的字符,这是因为我正在建立一个用户可以存储内容的网站,并通过在{{中挖掘它的名字来转到内容页面1}}。
所以,像URL
或Wikipedia
网站。
我在网站上看到,用户可以写一些像Last.FM
这样的内容,并且艺术家的页面可以到达。
在页面加载后,如果我复制了URL,我看到写为:http://it.wikipedia.org/wiki/Trentemøller
但是如果我将其粘贴到文本编辑器中,它将被粘贴为
http://it.wikipedia.org/wiki/Trentemøller
所以将http://it.wikipedia.org/wiki/Trentem%C3%B8ller
字符粘贴为ø
当然对于这样的网址(艺术家Takeshi Kobayashi的页面)也一样
%C3%B8
http://www.last.fm/music/小林武史
如果我对第一个或第二个进行数字处理,那么页面在任何情况下都有效,为什么?
我想我应该对http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2
和.htacces
做一些事情,但我不确定,这些特殊字符会自动转换为网址特殊字符吗?
然后,我该如何让PHP使用内容名称进行正确的查询?
如果我有一张像
这样的表格mod_rewrite
我可以table_users
- username
- age
- height
- weight
- sex
- email
- country
写一个像mod_rewrite
这样的地址来获取http://mysite.com/user/bob
的{{1}} bob,但是username
呢?
这里我展示了一个我想做的简单例子:
table_users
这有效,但它仅限于[a-zA-Z0-9 _ + - ],如何在不损失太多安全性的情况下更好地兼容所有其他字符?
有人知道某种方法来避免麻烦吗?
答案 0 :(得分:5)
尝试使用urlencode和urldecode
编辑:
这是Visualy url编码和解码的描述
http://blog.neraliu.com/wp-content/uploads/2009/10/url-encoding.png
答案 1 :(得分:2)
大多数浏览器urlencode()
小林武史
到%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2
。
关于您的.htaccess
mod_rewrite
规则,您是否考虑过使用以下内容:
RewriteEngine On
RewriteRule ^(user/)(.+?)[/]?$ user.php?username=$2
答案 2 :(得分:0)
据我所知,每个非ASCII字符的URL都映射到唯一的基于ASCII的URL。这实际上是客户端的一项功能。请查看:http://kmeleon.sourceforge.net/bugs/viewbug.php?bugid=631以查看示例并链接到转换此版本的RFC。