我正在做一个有文章的网站,我需要文章有“友好”的url,基于标题。
例如,如果我的文章标题是“文章测试”,我希望URL是http://www.example.com/articles/article_test。
但是,文章标题(与任何字符串一样)可以包含多个特殊字符,这些字符不可能直接放在我的URL中。比如说,我知道?或#需要被替换,但我不知道所有其他。
url中允许使用哪些字符?什么东西是安全的?
我正在做一个有文章的网站,我需要文章有“友好”的url,基于标题。
例如,如果我的文章标题是“文章测试”,我希望URL是http://www.example.com/articles/article_test。
但是,文章标题(与任何字符串一样)可以包含多个特殊字符,这些字符不可能直接放在我的URL中。比如说,我知道?或#需要被替换,但我不知道所有其他。
url中允许使用哪些字符?什么东西是安全的?
当前回答
我认为你正在寻找类似“URL编码”的东西——对URL进行编码,以便在网络上使用它是“安全的”:
这里有一个参考。如果你不想要任何特殊字符,只需删除任何需要URL编码的字符:
HTML URL编码参考
其他回答
您最好只保留一些字符(白名单),而不是删除某些字符(黑名单)。
从技术上讲,你可以允许任何字符,只要你正确地编码它。但是,为了回答这个问题的精神,你应该只允许这些字符:
小写字母(将大写字母转换为小写字母) 数字,0到9 破折号或下划线_ 波浪号~
其他的一切都有潜在的特殊意义。例如,您可能认为可以使用+,但可以用空格替换。&也是危险的,特别是在使用一些重写规则时。
与其他注释一样,请查看标准和规范以获得完整的详细信息。
URI的格式在RFC 3986中定义。详见3.3节。
引用RFC 3986第2.3节:
URI中允许的但没有保留的字符 目的,都叫无保留。这包括大写和小写 字母、十进制数字、连字符、句号、下划线和波浪号。 字母数字"-" / "。"/ "_" / "~"
注意,RFC 3986比旧的RFC 2396列出了更少的保留标点符号。
看看RFC3986 -统一资源标识符(URI):通用语法,你的问题围绕着URI的路径组件。
foo: / / example.com: 8042 / / / ? name =雪貂#鼻子
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _____________________|__
/ \ / \
urn:example:animal:ferret:nose
引用3.3节,URI段的有效字符类型为pchar:
Pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
具体分为:
Alpha / digit / "-" / "."/ "_" / "~" pct-encoded “啊!”/ "$" / "&" / "'" / "(" / ")"/ "*" / "+" / " " / ";"/“=” ":" / "@"
或者换句话说:您可以使用ASCII表中的任何(非控制-)字符,除了/,?,#,[和]。
这一理解得到了RFC1738 -统一资源定位符(URL)的支持。
unreserved = ALPHA / DIGIT / "-" / "."/ "_" / "~"