如何在java中过滤单引号?
我有一个搜索框,如果有人输入单引号,我会收到数据库错误。
我不想在JavaScript或数据库级别上提交它;我想只用Java做。我怎么能这样做?
我不想完全失去它。还有其他方法吗?将用“工作”替换引用吗?
答案 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("'", "\\'");