filerering /替换java中的单引号

时间:2009-06-17 08:12:52

标签: java jsp

如何在java中过滤单引号?

我有一个搜索框,如果有人输入单引号,我会收到数据库错误。

我不想在JavaScript或数据库级别上提交它;我想只用Java做。我怎么能这样做?

我不想完全失去它。还有其他方法吗?将用“工作”替换引用吗?

2 个答案:

答案 0 :(得分:6)

我认为你是从错误的角度来解决这个问题。我强烈怀疑你正在构建你的SQL:

String sql = "SELECT * FROM TABLE WHERE USERID='" + userInput + "'";

或类似的东西。不要那样做。改为使用参数化查询,并提供用户输入作为参数。我曾经使用的每个数据库都知道如何处理它,它是处理用户输入的安全方式。

如果你真的,真的只是想摆脱引号,你可以使用:

text = text.replace("'", "");

......但请不要。改为使用参数化查询。

答案 1 :(得分:4)

是的,请使用PreparedStatement.setString():

String sql = "SELECT * FROM table WHERE USERID = ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "O'Connor");
ResultSet rs = pstmt.executeQuery();

数据库的转义规则不同。例如,在Oracle中,您可以复制使用者以使其转义。在MySQL中它是反斜杠+撇号(我认为)。

所以userInput = userInput.replaceAll("'", "''");userInput = userInput.replaceAll("'", "\\'");