关于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编码,否则提交上去一定有错。

时间: 2024-10-26 04:04:43

关于web开发工程中URL参数的编码问题的相关文章

python web开发-flask中url带斜线/和不带斜线/的区别详解

flask中带斜线和不带斜线的url 通过flask进行路由配置的时候,有一个细节,就是同样的url,带上"/"和不带"/"有什么区别. 举例说明: 比如有个url,名字为"/url" 先同时定义两种url,一种带"/",一种不带"/",如下代码: @app.route("/url")def urlWithOut():return "url with out /" @

web工程中URL地址的写法

在开发中我们不可避免的要碰到许多需要写URL地址的情况,这常常让我们感到头疼.下面笔者推荐一种简单的做法.URL地址分为绝对路径和相对路径两种.相对路径又分为相对资源路径和相对根路径.显然绝对路径在开发中是要禁用的.至于相对资源路径和相对根路径用哪个的问题,笔者推荐用相对根路径,相对资源路径容易引起混乱.笔者建议在web开发中通通使用相对根路径,即通通以"/"开头写URL地址.因为这样我们只需弄清楚"/"代表谁即可.可以简单的理解为"/"是给谁用

NGINX模块开发 之 验证URL参数

作者:邹祁峰 邮箱:[email protected] 博客:http://blog.csdn.net/qifengzou 日期:2014.05.26 16:45 转载请注明来自"祁峰"的CSDN博客 要求在浏览器地址栏中输入"localhost/login?user=qifeng&passwd=123456",并在浏览器上显示验证结果(Success 或 Failed).以下是在NGINX中添加一个LOGIN模块的整个处理过程. 1 修改配置 修改配置文件

Ajax的底层实现--使用Ajax实现无刷新登录实例--解决ajax中URl参数带中文的乱码问题

  1.jsp代码 第一部分(html代码):前端页面 <div id="login"> 用户名: <input type="text" id="userName"/> <!--用户名--> 密码: <input type="password" id="psw"/> <!--密码--> <input type="submit&quo

Java Web开发Tomcat中三种部署项目的方法

一般情况下,开发模式下需要配置虚拟主机,自动监听,服务端口,列出目录文件,管理多个站点等功能 准备工作: 软件包:apache-tomcat-6.0.20.rar 将软件包解压至硬盘一分区,进入%TOMCAT_HOME%/conf目录 一:server.xml 配置 1.配置端口,修改server.xml. <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"

web开发技术中Servlet技术的概述

1.servlet是什么:servlet是一个位于服务器端的java应用程序它可以像jsp一样,直接输出信息 servlet类必须继承HttpServlet类,否则,不能称为serlvet servlet类是一个java类,但是有自己的规则servlet必须在web.xml文件中注册服务器在启动的时候,可以根据这些配置来加载servlet类....... 2.servlet作用:C:控制层serlvet主要用来做控制转发,需要结合到MVC模式(套路) 3.servlet生命周期:initserv

AngularJs中url参数的获取

前言: angular获取通过链接形式访问的页面,要获取url中的参数,就不能通过路由的方式传递获取了,使用原生js或者jquery,又显得比较麻烦,好在angular已经封装了获取url参数的方法,而且只需要一行代码搞定,简单粗暴,完胜传统的url截取匹配字符串的方式. var para=$location.$$search["para"] url中其他参数获取: // 带#号的url,看?号的url,见下面 url = http://qiaole.sinaapp.com?#name

程序ajax请求公共组件app-jquery-http.js中url参数部分的项目应用

结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该微信用户的code,拿到code传给后台,换取用户的openid. 2.微信登录(开放平台):微信登录通过微信开放平台,由于第一步公众平台拿到的code会混淆开放平台的code,导致用户使用微信登录失败,就需要使用该插件将url参数重置. 3.微信支付(公众平台):像后台传输步骤一获取的openid

开发工程中遇到的BUG

Xcode7自带Git创建的项目"Couldn't communicate with a helper application" git xcode7 zhunjiee 2015年10月08日提问 关注 3 关注 收藏 0 收藏,4.9k 浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键内容,没有改进余地 Xcode7在创建项目的时候勾选此选项,创建出来的项目会报如下错误警告:"Couldn't communicate with a helper a