永发信息网

为什么encode两次

答案:2  悬赏:50  手机版
解决时间 2021-02-27 13:33
  • 提问者网友:做自己de王妃
  • 2021-02-26 16:55
为什么encode两次
最佳答案
  • 五星知识达人网友:酒安江南
  • 2021-02-26 17:19
一共就是两个Decode 了,既然要两次Decode,当然就需要两次Encode 了。或许你会问,干
脆只Encode 一次,然后在java 代码里不Decode,呵呵,这个也是 不行的,这其实也就是
一 般 情 况 下 , 发 送 encodeURIComponent(parmeName)+ =
+encodeURIComponent(parmeValue);
接收时, 直接 String paramValue = request.getParameter(paramName); // 容器自动解码.
我们知道 encodeURIComponent 使用的是 UTF-8 编码规则来编的.
如果 request.getParameter(paramName) 时,容器也按 UTF-8 解的话,是正确的. 根本无须在客户端进行二次的 encodeURIComponent(...)
如果你在 jsp 程序中,能够 request.setCharacterEncoding( UTF-8 ), 并且 修改服务器
配置,让容器在解 GET 提交的参数时,使用 UTF-8.
客户端提交前不用二次编码, 接收时,也只要直接 request.getParameter(paramName) 即可
---------------------
如果因为项目需要,不能指定容器使用何种编码规则来解码提交的参数, 比如:需要接收来
自不同页面,不地编码的参数内容时。 (又或者是开发人员被这有点复杂的东东搞得晕头转
这个时候,在客户端对参数进行二次编码,可以有效的避开“提交多字节字符”的这个棘手问题。
因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串。(这里
把编第一次的结果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不带有多字节字符的)
再编一次后,提交,接收时容器自动解一次 (容器自动解的这一次,不管是按 GBK 还是
UTF-8 还是 ISO-8859-1 都好,都能够正确的得到 [STR_ENC1])
然 后 , 再 在 程 序 中 实 现 一 次 decodeURIComponent (Java 中 通 常 使 用
java.net.URLDecoder(***, UTF-8 )) 就可以得到想提交的参数的原值。
全部回答
  • 1楼网友:煞尾
  • 2021-02-26 17:56
用decode 解码两次不久出来了,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯