我正在做一个有文章的网站,我需要文章有“友好”的url,基于标题。
例如,如果我的文章标题是“文章测试”,我希望URL是http://www.example.com/articles/article_test。
但是,文章标题(与任何字符串一样)可以包含多个特殊字符,这些字符不可能直接放在我的URL中。比如说,我知道?或#需要被替换,但我不知道所有其他。
url中允许使用哪些字符?什么东西是安全的?
我正在做一个有文章的网站,我需要文章有“友好”的url,基于标题。
例如,如果我的文章标题是“文章测试”,我希望URL是http://www.example.com/articles/article_test。
但是,文章标题(与任何字符串一样)可以包含多个特殊字符,这些字符不可能直接放在我的URL中。比如说,我知道?或#需要被替换,但我不知道所有其他。
url中允许使用哪些字符?什么东西是安全的?
当前回答
3-50个字符之间。可以包含小写字母、数字和特殊字符——点(.)、破折号(-)、下划线(_)和@。
其他回答
您最好只保留一些字符(白名单),而不是删除某些字符(黑名单)。
从技术上讲,你可以允许任何字符,只要你正确地编码它。但是,为了回答这个问题的精神,你应该只允许这些字符:
小写字母(将大写字母转换为小写字母) 数字,0到9 破折号或下划线_ 波浪号~
其他的一切都有潜在的特殊意义。例如,您可能认为可以使用+,但可以用空格替换。&也是危险的,特别是在使用一些重写规则时。
与其他注释一样,请查看标准和规范以获得完整的详细信息。
我认为你正在寻找类似“URL编码”的东西——对URL进行编码,以便在网络上使用它是“安全的”:
这里有一个参考。如果你不想要任何特殊字符,只需删除任何需要URL编码的字符:
HTML URL编码参考
我发现当我通过Ajax/PHP返回一个值到一个URL,然后由页面再次读取时,将我的URL编码为一个安全的URL非常有用。
PHP输出与URL编码器的特殊字符&:
// PHP returning the success information of an Ajax request
echo "".str_replace('&', '%26', $_POST['name']) . " category was changed";
// JavaScript sending the value to the URL
window.location.href = 'time.php?return=updated&val=' + msg;
// JavaScript/PHP executing the function printing the value of the URL,
// now with the text normally lost in space because of the reserved & character.
setTimeout("infoApp('updated','<?php echo $_GET['val'];?>');", 360);
3-50个字符之间。可以包含小写字母、数字和特殊字符——点(.)、破折号(-)、下划线(_)和@。
总是安全的
在理论上和规范上,除了域名之外,这些基本在任何地方都是安全的。对未列出的内容进行百分比编码,就可以开始了。
A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;
有时安全
只有在特定URL组件中使用才安全;小心使用。
Paths: + & =
Queries: ? /
Fragments: ? / # + & =
不安全的
根据URI规范(RFC 3986),所有其他字符必须用百分比编码。这包括:
<space> <control-characters> <extended-ascii> <unicode>
% < > [ ] { } | \ ^
如果最大兼容性是一个问题,限制字符集为a-z a-z 0-9 - _。(仅对文件名扩展名使用句点)。
牢记语境
即使根据规范有效,URL仍然可能是“不安全的”,这取决于上下文。例如包含无效文件名字符的file:/// URL,或者不用作分隔符时包含“?”、“=”和“&”的查询组件。这些情况的正确处理通常取决于您的脚本,并且可以解决,但这是需要记住的事情。