zoukankan      html  css  js  c++  java
  • 关于web开发工程中URL参数的编码问题

    近日在项目中,在velocity开发的页面模板中的使用a标签创建链接,并且带有需要提交的参数(这里没有使用form的原因是因为该模板生成的email,发送给客户,由于客户的email客户端可能是https,而模板上面的链接并不是跳转到https的站点,使用form将导致浏览器这种混合的链接)。当通过该模板生成的页面上进行跳转时,发现链接提交的参数发生了变化,具体表现是参数提交时是一串包含10位任意可输出字符的字符串,字符串里有“+”字符,提交后后台后“+”字符不见了,取而代之是一个空格。通过firebug观察条件的过程传递的参数,发觉提交参数时已经发生了变化才导致后台接收到错误的参数。此问题是因为我们在velocity上构建链接时,使用了a标签,并且参数没有进行url编码就直接跟在链接地址后面:如下:

    <a href="$repayUrl/test!test.action?param1=$!param1&param2=$!param2">
                click me
            </a>

    a标签创建的链接包含参数param1和param2,并且具体参数值都是从后台生成的,param2就是出了问题的参数,解决办法是生成url过程中,对参数进行url编码,velocity自带了编码工具org.apache.velocity.tools.generic.EscapeTool,对参数进行url编码,

    <a href="$repayUrl/test!test.action?param1=$!param1&param2=$esc.url($!param2)">
                click me
    </a>
    //这里假设esc为EscapeTool的引用,当然使用前先要在放入模板引擎里

    这样参数param2就能被正确提交,我们不对param1进行编码,是因为我们确定param1是Integer类型,其实最安全方法还是对整个url进行编码。

      还有,使用struts2标签开发页面的人都有使用<s:a >标签的经验,使用该标签可以很方便地构建符合要求的url,可能是因为该标签已经对url进行的编码。但是如果使用html的a标签就要注意,参数一定要url编码,否则提交上去一定有错。

    不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之
  • 相关阅读:
    个人博客08
    《新浪微博平台架构》---阅读
    《阿里游戏高可用架构设计实践》---阅读
    《京东咚咚架构演进》---阅读
    《京东话费充值系统架构演进实践》--阅读
    实时获取input框内容
    html:判断两次密码不一致以及阻止提交
    《京东到家库存系统架构设计》---阅读
    《数据蜂巢架构演进之路》---阅读
    SOA案例分析浅谈
  • 原文地址:https://www.cnblogs.com/lauyu/p/4985167.html
Copyright © 2011-2022 走看看