常见错误及解决方法及代码
来源:互联网 发布:淘宝买家级别怎么分 编辑:程序博客网 时间:2024/06/04 18:46
在HTML的标签中,当onclick属性中的javascript传入的参数包含单引号或者双引号时,会包JS错误。
例如:
<input onClick="doSomething('${param}');" type="button" />
当后台传来的param字符串带有单引号或者双引号时,IE6在载入页面时直接报错,
FF载入页面虽然没有报错,但是点击按钮后没有反应,用firebug查看控制台,会看到也有错误信息。
原因就是参数中的单引号或双引号使得<input>标签没有正确的结束。
我尝试一些办法:
1.解决方案1:解决单引号问题
<c:set var="temp_param" value='${fn:replace(param,"\'","\\\\\'")}' /><input onClick="doSomething('${temp_param}');" type="button" />
2. 解决方案2: 解决双引号问题
<c:set var="temp_param" value="${fn:escapeXml(param) }"/><input onClick="doSomething('${temp_param}');" type="button" />
想问问大家,还有没有更好的方法,可以同时解决单、双引号的问题?
谢谢!
PS:
<c:set var="temp_param" value="${fn:replace(param,'\"','\\\\\"')}" /><input onClick="doSomething('${temp_param}');" type="button" />
这样是无法正确解决双引号问题的。共有7个答案最后回答: 5年前
按票数排序显示最新答案
1
<input type="button" onclick="alert('\'aaa');" value="alert" />
把引号转成上面那样就可以了 --- 共有 3 条评论 ---pyawen:@JustForFly : 刚才被转义了 用 & quot; 去掉中间的空格5年前
pyawen:@JustForFly : 把双引号转义为 " 单引号按上面那样处理5年前
JustForFly:首先谢谢你的回答。 我的方案1就是这样做的。 不同在于,你是直接传字符串 'aaa,而我的问题是,传入的字符串是来自后台的(存放在request中的变量),你不知道里面是有单引号还是有双引号。 所以,我的需求是,能不能有一次性就将后来传来的参数中带有的特殊符号转义的方法,转义后,就可以直接作为javascript的参数。5年前
pyawen
0
谢谢你的回答,在你的提醒下,我最后只能用下面的方法来解决问题:
<c:set var="temp_param1" value="${fn:escapeXml(param1) }"/><c:set var="temp_param1" value='${fn:replace(temp_param1,"'","\\\\\'")}' /><input type="button" onclick="test('${temp_param1}');" value="param2" /><br/>
还是找不到能够一步到位的方法。虽然fn:escapeXml可以将单引号和双引号都转义为:' 和 "
但是'(单引号)作为JS的参数还是会报错,所以,我又只有再转义'为 \' ,只有 \' 不会报错。
评论(0) 引用此答案举报JustFo...
0
用我的方法,永远不会出现问题,加一个ID属性就可以了
<input type="button" id="btnTest" value="param2" /><script for="btnTest" event="onclick" type="text/javascript">test('${temp_param1}')</script>
评论(0) 引用此答案举报
opal
0
引用来自“opal”的答案
用我的方法,永远不会出现问题,加一个ID属性就可以了
<input type="button" id="btnTest" value="param2" /><script for="btnTest" event="onclick" type="text/javascript">test('${temp_param1}')</script>
先谢谢你的帮助。
你的方法不行。
1.在FF中点按钮,没有反应。
2.在IE中,
如果是单引号,写成下面的形式,没有问题
<script for="btn1" event="onclick" type="text/javascript">test("${param1}");</script>
但是,写成
test('${param1}');
依然会报错。
如果是包含双引号,则结果和上面的相反。
3.如果字符中既有单引号,也有双引号,就都有问题了。
其实,我提出的问题,就是要解决你这样写会出现的问题。
JustFo...
0
我的解决方法:
1、输入格式控制,把单双引号不让输入(当前中文的可以输入);
2、先将数据转义后,再与onclick绑定;
JustForFly:针对当前数据转义应该是可行的。 5年前
xiaoyang0878:@JustForFly : 先不考虑对所有的数据进行转义,如果只对当前读取的数据转义是否可行?5年前
JustForFly:1.我这个系统不能做这样的限制,我这个里面会用到法文,里面很多有单引号。而且,很多初始化的数据里,也有单引号。 2.我也想过这个方法,但是需要转义的地方太多。我想过全部去转义,但是担心对性能的影响,以及其他的不确定因素。 目前,我所考虑的是把需要转义的地方列出来,选择性过滤。5年前
xiaoya...
0
把外面的双引号去掉
<
input
onClick
=
doSomething('${param}');
type
=
"button"
/>
goingta
0
可能的包含:单引号,双引号,还有回车等
用一个var来表示,如果有多个变量使用array来存string.
在JavaScript中调用时再从var中取.
阅读全文
0 0
- 常见错误及解决方法及代码
- 常见错误及解决方法
- 常见错误及解决方法
- 常见错误分析及解决方法
- MOSS2007常见错误及解决方法
- IIS7常见错误及解决方法
- Lpc1768 常见错误及解决方法
- webservice 常见错误及解决方法
- java常见错误及解决方法
- Android常见错误及解决方法
- Oracle 常见错误及解决方法
- VS2012常见错误及解决方法
- C++常见错误及解决方法
- java常见错误及解决方法
- Rsync 常见错误及解决方法
- hadoop常见错误及解决方法
- Delphi常见错误及解决方法
- Servlet常见错误及解决方法
- 操作给定的二叉树,将其变换为源二叉树的镜像。
- 最短路变形 nyoj1248、poj1797 dijkstra+堆优化
- sdk兼容性总结---随时更新补充
- ajaxfileupload.js+springMVC实现多个图片与数据同一个ajax方法上传
- 为啥显示器用RGB而打印机用CMYK
- 常见错误及解决方法及代码
- BootLoader启动过程分析
- 服务器定时任务的执行失败重新尝试5次
- PHP中对public,static,private,protected的理解
- 测试Linux设备MTU值得方法
- [python][project][爬虫] 堆糖网图片下载
- 特征工程和特征提取的思路整理
- 一款很牛逼的图片压缩工具
- leetcode_add_two_numbers