为什么服务器可以解析二次url编码后的数据?

为什么服务器可以解析二次url编码后的数据?,第1张

地址栏中出现汉字的情况有两种:

一种是汉字出现在URL的路径部分,另一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接收时解码的方式完成传参。

js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法,escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对""等特殊字符进行编码。

一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出  isHexDigit异常。借助百度搜索isHexDigit异常,发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoderdecode(requestgetParameter("参数名"),"UTF-8");完成解码。

只进行一次编码,把中文编码成%xy

浏览器获取URL地址后解码成%xy,

总结:

1、汉字出现在URL路径部分的时候不需要编码解码;

2、使用encodeURI进行2次编码;

3、在openModelDialog()打开的模式窗体里没办法用requestgetParameter正确获取参数;

客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoderdecode(“中文”, "UTF-8");

今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。

页面

var name=documentmyFormusernamevalue;

var url="Ajaxdomethod=check&name="+encodeURI(encodeURI(name));

xml>1IP地址:每个连接到Internet上的主机都会分配一个IP地址,IP地址是用来唯一标识互联网上计算机的逻辑地址,机器之间的访问就是通过IP地址来进行的。IP地址采用二进制的形式表示的话很长,比较麻烦,为了便于使用,IP地址经常被写成十进制的形式,用“”分开,叫做“点分十进制表示法”,如:127001。

2域名:IP地址毕竟是数字标识,使用时不好记忆和书写,因此在IP地址的基础上又发展出一种符号化的地址方案,来代替数字型的IP地址。每一个符号化的地址都与特定的IP地址对应。这个与网络上的数字型IP地址相对应的字符型地址,就被称为域名。目前域名已经成为互联网品牌、网上商标保护必备的要素之一,除了识别功能外,还有引导、宣传等作用。如: ;有时可省略。如: >当计算机出现了解析问题检测方法一般都是用dos命令来检查:
(1)用nslookup来判断是否真的是DNS解析故障:
要想百分之百判断是否为DNS解析故障就需要通过系统自带的NSLOOKUP来解决了。
第一步:确认自己的系统是windows 2000和windows xp以上 *** 作系统,然后通过“开始-》运行-》输入CMD”后回车进入命令行模式。
第二步:输入nslookup命令后回车,将进入DNS解析查询界面。
第三步:命令行窗口中会显示出当前系统所使用的DNS服务器地址,
第四步:接下来输入无法访问的站点对应的域名。
小提示:如果DNS解析正常的话,会反馈回正确的IP地址。
(2)查询Dns服务器工作是否正常:
这时候就要看看自己计算机使用的DNS地址是多少了,并且查询他的运行情况。
第一步:确认自己的系统是windows 2000和windows xp以上 *** 作系统,然后通过“开始-》运行-》输入CMD”后回车进入命令行模式。
第二步:输入ipconfig /all命令来查询网络参数。
第三步:在ipconfig /all显示信息中能够看到一个地方写着DNS SERVERS,这个就是DNS服务器地址。
第四步:如果在DNS服务器处显示的是自己公司的内部网络地址,那么说明们公司的DNS解析工作是交给公司内部的DNS服务器来完成的,这时需要检查这个DNS服务器,在DNS服务器上进行nslookup *** 作看是否可以正常解析。解决 Dns服务器上的DNS服务故障,一般来说问题也能够解决。

不同的浏览器,在URL地址中传中文,会有不同的结果。有些是GBK,有些是UTF-8,为了防止由于浏览器的自动化所带来的不便,中文最要先用urlencode处理一下,接收端用urldecode来处理。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12820105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存