我需要建立一个有文章的网站,我想为它制作友好的URL,例如页面的URL
标题:文章测试
应该成为:http://www.example.com/articles/article_test
.
当然我需要删除标题中的一些字符,?
或者#
,但我不确定要删除哪些字符.
谁能告诉我哪些角色可以保存?
引用RFC 3986的 2.3节:
"URI中允许但没有保留目的的字符称为未保留字符.这些字符包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号."
ALPHA DIGIT "-" / "." / "_" / "~"
请注意,RFC 3986列出的保留标点符号少于旧版RFC 2396.
您需要注意两组字符:保留和不安全.
该保留的字符是:
&符号("&")
美元("$")
加号("+")
逗号(",")
正斜杠("/")
冒号(":")
分号(";")
等于("=")
问号("?")
'at'符号("@")
磅("#").
通常认为不安全的人物是:
空间 (" ")
小于和大于("<>")
打开和关闭括号("[]")
打开和关闭大括号("{}")
管道("|")
反斜杠("\")
插入符号("^")
百分 ("%")
我可能已经忘记了一个或多个,这让我回应了Carl V的回答.从长远来看,你可能最好使用允许字符的"白名单"然后编码字符串,而不是试图及时了解服务器和系统不允许的字符.
您最好只保留一些字符(白名单),而不是删除某些字符(黑名单).
只要您正确编码,您就可以在技术上允许任何角色.但是,要回答问题的精神,你应该只允许这些字符:
小写字母(将大写字母转换为小写字母)
数字,0到9
破折号 - 或下划线_
Tilde~
其他一切都有潜在的特殊含义.例如,您可能认为可以使用+,但可以用空格替换.并且也很危险,特别是如果使用一些重写规则.
与其他评论一样,请查看标准和规范以获取完整的详细信息.
这些是安全的(理论上/规范),基本上除了域名以外的任何地方.
百分比编码未列出的任何内容,你很高兴.
A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;有时安全
仅在特定URL组件中使用时才安全; 小心使用.
Paths: + & = Queries: ? / Fragments: ? / # + & =绝不安全
根据URI规范(RFC 3986),所有其他字符必须是百分比编码的.这包括:
% < > [ ] { } | \ ^
如果需要考虑最大兼容性,请将字符集限制为AZ az 0-9 - _.
(仅限文件扩展名的句点).
查看RFC3986 - 统一资源标识符(URI):通用语法,您的问题围绕URI 的路径组件.
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose
引用第3.3节,URI的有效字符segment
类型为pchar
:
pchar = unreserved/pct-encoded/sub-delims /":"/"@"
其中细分为:
ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded
"!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
":" / "@"
或者换句话说:你可以使用来自任何(非控制- )字符的ASCII表,除了 /
,?
,#
,[
和]
.
这种理解得到RFC1738 - 统一资源定位器(URL)的支持.
unreserved = ALPHA/DIGIT /" - "/"." /"_"/"〜"
从你描述的背景来看,我怀疑你实际上想要做的是一种叫做"SEO slug"的东西.对他们来说最好的一般做法是:
转换为小写
将除az和0-9之外的整个字符序列转换为一个连字符( - )(不是下划线)
从网址中删除"停用词",即"a","an"和"the"之类的无意义索引词.对于广泛的列表,谷歌"停止说话"
因此,作为一个例子,一篇名为"使用!@%$*代表在漫画中咒骂"的文章会得到一个"使用代表 - 咒骂漫画".
URI的格式在RFC 3986中定义.详情请参阅第3.3节.
从SEO的角度来看,连字符比下划线更受欢迎.转换为小写,删除所有撇号,然后用单个连字符替换所有非字母数字字符串.从开始和结束开始修剪多余的连字符.