chrome url参数特殊字符不能包含哪些字符

http url 的path究竟可以包含哪些字符&
你觉得下面这些看起来像url的东西是啥?
/@&/;:=***/new-blog
/*+/-9!/new-blog
/*+/-9!/+-_)(
其实它们也是url,而且但从语义和语法来讲,它们都是正确的url,但是osc肯定没有这些url所对应的资源(我试过了^_^)。
因为开发mvc时,我要解析url中 path 部分,就要知道path中能包含什么字符,所以就研究rfc中关于url的path部分的定义。
一个典型的http url 大概是长这样的(只讨论你手动在浏览器中输入url的情况):
/money/rmb?quantity=1000000
它的结构分析如下:
协议和主机名的分隔符
/money/rmb
路径与查询参数的分隔符
quantity=1000000
本文讨论内容局限在“查询路径”部分,探讨查询路径中每个path segment(上表中的money or rmb)最终所能包含的字符。
开始在网上找了好久都找到满意的答案,全部都是说url中 哪些字符需要转码,而哪些字符不需要转码的。至于最终哪些字符会出现在path segment上,并没有直接说明。最终只能自己动手了——查rfc文件。
文件的17~18页中有关于http url的语法和文法定义。我后来把与path segment相关的部分摘抄如下:
= "http://" hostport [ "/" hpath [ "?" search ]]
= hsegment *[ "/" hsegment ]
= *[ uchar | ";" | ":" | "@" | "&" | "=" ]
= unreserved | escape
unreserved
= alpha | digit | safe | extra
= lowalpha | hialpha
= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" |
"i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" |
"q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" |
= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" |
"J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" |
"S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
= "$" | "-" | "_" | "." | "+"
= "!" | "*" | "'" | "(" | ")" | ","
= "%" hex hex
= digit | "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f"
一开始我看不懂那个定义到底是怎么回事,后来才知道这是用 扩充巴科斯-瑙尔范式(ABNF)定义的,关于ABNF的规则较多,可以参考这里:
用ABNF范式去解读 rfc1738 对http url的定义,我们就知道定义规则右边出现的所有字符都可以出现在path segment中,这就能解释开头哪些奇怪的url居然是正确的了。
部分参考资料:
每个 Web 开发者都应该知道的关于 URL 编码的知识
其他的忘了
人气:1410
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.036 (s). 13 q(s)&&&&&&&&&&&&&&&&&&
posts - 112,comments - 9,trackbacks - 0
今天写到两个页面传值,刚开始通过url上加参数进行传值,
var strLink = "my.asp?str1=" + str1List + "&str2=" + str2Lvar iHeight = 600;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 高度var iWidth = 1000;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 宽度var iTop = (window.screen.availHeight - 30 - iHeight) / 2;&&&&&&&&&&&&&&&&&&&& // 获得窗口的垂直位置;var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;&&&&&&&&&&&&&&&&&&&&&& // 获得窗口的水平位置;window.open(strLink, "_blank", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)
其中str1List是一个单号的列表,str2是另外一个单号的列表,将参数传到my.asp,然后用Request.QueryString获取参数的值进行处理,刚开始my.asp页面运行没有问题,可是当单号的数据量比较大的时候,my.asp页面就报错。经过排查,发现参数传到my.asp后,str1List数量少了,str2List没了,才知道应该是url传值时,数据没截掉了。
然后上网查了一下,发现url是有长度限制了,网上是这样说的:
通过URL传值的问题,所以对url字符串进行encodeURIComponent对url字符串内容进行编码,问题解决,但是有时候会出现&The request filtering module is configured to deny a request where the query string is too long,问题的原因是 以get方式传字符串的时候,有长度限制。
IIS 7对于Query String有长度限制。默认为2048.
该问题的解决办法可以通过修改configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.
&requestLimits maxQueryString="length" /&
各浏览器与各Web Server对URL均有长度的限制如下:
在http协议中,其实并没有对url长度作出限制,往往url的最大长度和用户浏览器和Web服务器有关,不一样的浏览器,能接受的最大长度往往是不一样的,当然,不一样的Web服务器能够处理的最大长度的URL的能力也是不一样的。下面就是对各种浏览器和服务器的最大处理能力做一些说明.
Microsoft Internet Explorer (Browser)IE浏览器对URL的最大限制为<span style="color: #个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser)对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。
Safari (Browser)URL最大长度限制为 80,000个字符。
Opera (Browser)URL最大长度限制为190,000个字符。
Google (chrome)url长度一旦超过8182个字符时,出现如下服务器错误:
Request-URI Too LargeThe requested URL's length exceeds the capacity limit for this server.Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80
Apache (Server)能接受最大url长度为8,192个字符。
Microsoft Internet Information Server(IIS)能接受最大url的长度为16,384个字符。
通过上面的数据可知,为了让所有的用户都能正常浏览,我们的URL最好不要超过IE的最大长度限制(2038个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,侧这时的长度就只受Web服务器影响了。
可能有些朋友会想当然的认为,如果最大长度限制为2038字符,是不是参数差不多可以传递1000个左右的汉字。这样认为其实是不对的,对于中文的传递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。
这是网上引用过来的,总的来说,就是不同的浏览器对url都有不同的长度限制的。
这样的话,我上面的问题句真的不能用url传值了,因为我的str1List和str2List长度是不定了,只能想其他途径了。
经过一番琢磨,发现使用建议使用表单+POST方法传参,这样就没有大小限制了。其实我是要把当前页面&form action="my.asp" method="post"&然后跳到my.asp页面后,用request.Form获取参数值就可以了。
但是我的当前页面还不能这样做,因为form的action已经用户另一个页面了,所以还不能这样做,
最后,通过在button提交的js中写上提交页面,如下:
&&&&& var iHeight = 600;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 高度&&&&& var iWidth = 1000;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 宽度&&&&& var iTop = (window.screen.availHeight - 30 - iHeight) / 2;&&&&&&&&&&&&&&&&&&&& // 获得窗口的垂直位置;&&&&& var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;&&&&&&&&&&&&&&&&&&&&&& // 获得窗口的水平位置;&&&&& window.open("", "test", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)
&&&&& document.forms[0].action = "my.asp&;&&&&& document.forms[0].target = "test";&&&&& document.forms[0].submit();
然后在跳到my.asp页面后,用request.Form获取参数值就可以了。试了一下,数据量比较大时,都没有问题。
阅读(...) 评论()通过URL传值的问题,所以对url字符串进行encodeURIComponent对url字符串内容进行编码,问题解决,但是有时候会出现&The request filtering module is configured to deny a request where the query string is too long,问题的原因是 以get方式传字符串的时候,有长度限制。
IIS 7对于Query String有长度限制。默认为2048.
该问题的解决办法可以通过修改configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.
&requestLimits maxQueryString="length" /&
各浏览器与各Web Server对URL均有长度的限制如下:
在http协议中,其实并没有对url长度作出限制,往往url的最大长度和用户浏览器和Web服务器有关,不一样的浏览器,能接受的最大长度往往是不一样的,当然,不一样的Web服务器能够处理的最大长度的URL的能力也是不一样的。下面就是对各种浏览器和服务器的最大处理能力做一些说明.
Microsoft Internet Explorer (Browser)IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser)对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。
Safari (Browser)URL最大长度限制为 80,000个字符。
Opera (Browser)URL最大长度限制为190,000个字符。
Google (chrome)url长度一旦超过8182个字符时,出现如下服务器错误:
Request-URI Too LargeThe requested URL's length exceeds the capacity limit for this server.Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80
Apache (Server)能接受最大url长度为8,192个字符。
Microsoft Internet Information Server(IIS)能接受最大url的长度为16,384个字符。
通过上面的数据可知,为了让所有的用户都能正常浏览,我们的URL最好不要超过IE的最大长度限制(2038个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,侧这时的长度就只受Web服务器影响了。
可能有些朋友会想当然的认为,如果最大长度限制为2038字符,是不是参数差不多可以传递1000个左右的汉字。这样认为其实是不对的,对于中文的传递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。
&---------------------url 长度过长,可以使用form 提交的方式
阅读(...) 评论()URL中的特殊字符 - CSDN博客
URL中的特殊字符
在url中”+”,”/”,”?”,”%”,”#”,”&”是有特殊意义的,被称为url的元字符。
1 url中的元字符
url中元字符是不能直接传递的,如果要在url中传递这些元字符,必须使用百分号编码即%+字符的ASCII码。
表示空格(在url中不能使用空格)
分割目录和子目录
分割实际的URL和参数
指定特殊字符
URL中指定的参数间的分隔符
2 url编码的基本规则
变量之间用“&”分开;
变量与其对应值用“=”连接;
空格用“+”代替;
保留的控制字符用“%”连接对应的16进制ASCII码代替;
某些具有特殊意义的字符也用“%”连接对应的16进制ASCII码代替;
空格是非法字符;
任意不可打印的ASCII控制字符均为非法字符
// 三个参数:filename、e-mail、comments
// 其中comments的值为:I'll be there for you
?filename=hello&e-mail= &comments=I%2ll+be+there+for+you
3 url中”#”
10年9月,twitter改版。一个显著变化,就是URL加入了”#!”符号。比如,改版前的用户主页网址为改版后,就变成了。这是主流网站第一次将”#”大规模用于重要URL中。这表明井号(Hash)的作用正在被重新认识。本文根据HttpWatch的文章,整理与井号有关的所有重要知识点。
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。
为网页位置指定标识符,有两个方法。
一是使用锚点,比如
name="print"&&
二是使用id属性,比如
id="print"&
HTTP请求不包括#
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
比如,访问下面的网址,,浏览器实际发出的请求是这样的:
GET /index.html HTTP/1.1
在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。
比如,下面URL的原意是指定一个颜色值:,但是,浏览器实际发出的请求是:
GET /?color= HTTP/1.1
改变#不触发网页重载
单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。比如,从改成,浏览器不会重新向服务器请求index.html。
改变#会改变浏览器的访问历史
每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用”后退”按钮,就可以回到上一个位置。这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。
window.location.hash读取#值
window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。
onhashchange事件
这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。
它的使用方法有三种:
window.onhashchange =
&body onhashchange="func();"&
window.addEventListener("hashchange", func, false);
对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。
Google抓取#的机制
默认情况下,Google的网络蜘蛛忽视URL的#部分。
但是,Google还规定,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用”#!”,Google会自动将其后面的内容转成查询字符串escaped_fragment的值。
比如,Google发现新版twitter的URL:就会自动抓取另一个URL:<a href="&/?escaped_fragment=/username”&/?escaped_fragment=/username
通过这种机制,Google就可以索引动态的Ajax内容。
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。AJAX 是一种用于创建快速动态网页的技术。
本文已收录于以下专栏:
相关文章推荐
URL特殊字符需转义&#160; &#160;&#160;1、空格换成加号(+)&#160; &#160;2、正斜杠(/)分隔目录和子目录&#160; &#160;3、问号(?)分隔URL和查询&#160; &#160;4、百分号(%)制定特殊字符&#160; ...
最近遇到一个问题,就是在URL中若是有特殊的非ASCII字符的话,访问会失败。
因为是是特殊字符首先想到的事用统一编码,用UTF-8转码。
这就又会遇到另一个问题,就是在URL里的 “/” 和“//”...
首先设置 apache 配置文件, server.xml 在 port=8080 那一行中加上 URIEcoding=GBK
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特...
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码&#160;
&#160;十六进制值&#160;
1. + URL 中+号表示空格 %...
当抓取的URL里出现特殊的字符,如非ASCII的法文:? ,你会发现程序界面会出现错误。
带“+”号的参数值通过url传递,后台取不到正确值
问题是这样的:
旧源代码:
javascript:
var url = &/quality/qualityStandard.do?metho...
URL特殊字符需转义
1、空格换成加号(+)
2、正斜杠(/)分隔目录和子目录
3、问号(?)分隔URL和查询
4、百分号(%)制定特殊字符
5、#号指定书签
6、&号分隔参数
在调用Web API时,使用直接POST URL的方式实现。但是在拼接URL的时候很可能遇到特殊字符或者中文的情况。
本人对URL的研究很浅,想解决URL中特殊字符的情况,就看了下chrome地址栏中...
为什么需要Url编码
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【已解决】GET方法的参数中处理URL特殊字符&%等 - CSDN博客
【已解决】GET方法的参数中处理URL特殊字符&%等
最近突然被分到后端做Web工具(也是直到最近才知道,在我们团队做高并发、大数据处理的才是后端,我们做产品、web开发的只能算前端,晕。。。)
有个需求是 根据url及时间范围查询抓取到的不同版本的网页快照,而综合考虑另外一个需求后,查询用了GET方法。
但是问题来了,当输入的URL中含有特殊字符时,输入参数有可能被剥离,比如:
URL为&http://www./zt/sz?PCBDZH%3D3&sz&47152 时,问题将会产生。因为这个输入的URL中刚好有&符号,如果不对URL做处理,导致的结果是,参数增多,原有URL被破坏。
PHP开发环境下,前端界面用的是smarty模板,解决方案是:
前端对参数进行编码:
&td&&a href=&/ss/snapshot/view?uuid={%$field.uuid%}&url={%$params.url|escape:&url&%}&listUrl={%$listUrl|escape:&url&%}&&查看&/td&
用到了Smarty中的escape,具体参考
本文已收录于以下专栏:
相关文章推荐
URL中编码URL特殊字符
下面是session失效拦截后重定向代码
String requestUri = request.getRequestURI();
String contextPath =...
Ajax 以GET方式请求时,参数中包含 “#” 特殊字符的处理Ajax 以GET方式请求时参数中包含
特殊字符的处理现象
提示现象在使用 jquery 的ajax调用后...
GET请求中参数含有某些特殊字符的处理
HTTP标准的两种请求方式:Post和Get,关于这两种请求方式的区别相关资料云集,这里不做阐述。然而,你是否注意到:
我们通过get方式从浏览器的地址...
URL特殊字符需转义&#160; &#160;&#160;1、空格换成加号(+)&#160; &#160;2、正斜杠(/)分隔目录和子目录&#160; &#160;3、问号(?)分隔URL和查询&#160; &#160;4、百分号(%)制定特殊字符&#160; &#160;5、#号指定书签&#160...
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码
      十六进制值
1. + URL 中+号表示空格 %...
url 特殊字符 传递参数解决方法
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码。
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 url不能包含特殊字符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信