【发布时间】:2023-12-08 10:40:01
【问题描述】:
假设我有一个<input> 标签。此标签的值用于更改。问题是如果用户输入单引号或双引号 - 它会破坏代码。
现在解决起来很简单:
- 覆盖这些键的按键;
- 禁止粘贴输入。
这里是示例代码:
HTML
<input id="TestInput"></input>
Javascript
$("#TestInput").keypress(function (e) { // override keypress of " or '
if (e.which == 13 || e.which == 34 || e.which == 39) {
return false;
}
})
.bind("paste", function (e) {// forbid paste
e.preventDefault();
})
.change(function(){
var value = $(this).val();
//and then I use this value for my operations
});
Sample Fiddle
问题:有没有更好的方法可以去掉所有引号而不禁止粘贴?
注意:我认为它可以用 RegExp 解决,但我对它们不好,所以如果你能提供一个 Regexp - 这可以工作。
提前感谢大家。
更新 1
在更改时,将对调用 DB 的方法执行 ajax 调用,并且引号会以某种方式中断查询,如下所示: 查询:
var query = "SELECT Column FROM table WHERE somecolumn LIKE '" + inputVal+ "'%";
如果inputVal 类似于"foo,则生成的刺将如下所示:
var query = "SELECT Column FROM table WHERE somecolumn LIKE '" + "foo+ "'%";
这显然会破坏查询。 + 数据库中没有包含引号的项目。
【问题讨论】:
-
不要阻止用户输入任何内容——这对用户体验不利。只要确保您的代码可以处理引号。要么逃避它们,要么替换它们。
-
更重要的问题是为什么引号会破坏你的代码?
-
使用 SQLParams 而不是直接获取 unsanitised 用户输入
-
它确实有一些影响,因为根据您用于服务器端方法的语言,您的语法将会改变。这是 MSDN article for SQL params in C#
-
您仍然应该首先对用户输入进行过滤。使用 SQL 参数是朝着正确方向迈出的良好一步
标签: javascript jquery html quotes double-quotes