URL传递特殊符号

编辑
文档创建者:文档助手1 (67727 )     浏览次数:2588次     编辑次数:11次     最近更新:jiangsr 于 2018-03-16     

目录:

1. 问题描述编辑

有些符号在URL中是不能直接传递的,如'+','%','&'等符号,那么如果要在URL中传递这些符号要如何实现呢?

2. 解决方案编辑

2.1 在浏览器中直接输入
1)解决方案
通过将这些特殊符号转换成16进制。
2)常用特殊符号及其编码
+:URL 中+号表示空格其编码是%2B
空格:URL中的空格可以用+号或者编码 %20
/:分隔目录和子目录其编码是%2F
?:分隔实际的 URL 和参数其编码是%3F
%:指定特殊字符其编码是%25
#:表示书签其编码是%23
&:URL中的&表示指定的参数间的分隔符其编码是%26
=:URL中的=表示指定参数的值其编码是%3D
注:在URL中,“+”的编码为%2B,除了跟“%”的编码%25拼接到一起的时候能正常显示外,其它拼接都默认显示为空格,要想正常显示,需将“+”的编码改为%252B才可以。
3)示例
如要字符串“this%is#te=st&o k?+/”作为参数t的值传递给test.cpt,则URL为:test.cpt&t=this%25is%23te%3Dst%26o%20k%3F%2B%2F或者test.cpt&t=this%25is%23te%3Dst%26o+k%3F%2B%2F(空格可以用%20或+代替)
例如在test.cpt某个单元格中填入=$t,分页预览,在URL后增加上面的URL,效果如下:
222
2.2 集成到项目中
1)解决方案
您可以通过JavaScript中自带的encodeURIComponent()方法对参数值进行编码转换。
2)示例
同样实现的是字符串“this%is#te=st&o k?+/”作为参数t的值传递给test.cpt,则对应的代码如下:
window.location="http://localhost:8075/WebReport/ReportServer?reportlet=test.cpt&t="+encodeURIComponent(encodeURIComponent("this%is#te=st&o k?+/"));
3)两次解码的解释
第一次encode是去掉特殊字符, 变成ascii字符串(STR_ENC1), 第二次encode是因为web容器得到后会去自动解一次,
容器req.getParameter自动解的这一次,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到[STR_ENC1], 
如果js只encode一次, 那么容器那边只能按照utf-8解(客户的tomcat可能有多种编码方式), 否则乱码, 最后java端再去URLDecoder.decode

注:GET的方式, 容器req.getParameter的时候会自动解码一次, 然后报表再解码一次. 而POST的方式, 容器不会自动解码的, 意味着传的时候, 只需要encode一次即可. 

附件列表


主题: 专题总结
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,请咨询帆软技术支持
关于技术问题,您还可以通过帆软论坛获取帮助,论坛上有非常多的大神,有些水平比帆软工程师还要高哦。
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?