我似乎有问题。我有一个查询字符串,其值可以包含单引号。这将中断查询字符串。因此,我试图进行替换以更改'为\'。
'
\'
这是一个示例代码:
"This is' it".replace("'", "\'");
输出仍然是:
"This is' it".
它认为我只是对引号进行转义。
所以我尝试了这两段代码:
"This is' it".replace("'", "\\'"); // \\ for the backslash, and a ' char "This is' it".replace("'", "\\\'"); // \\ for the backslash, and \' for the ' char
上面的两个STILL结果都相同:
"This is' it"
我似乎只能得到这实际上吐出一个斜线:
"This is' it".replace("'", "\\\\'");
结果是:
"This is\\' it"
有什么建议?我只是想更换一个'同\'。
似乎应该没有那么困难。
首先,如果您要对查询字符串编码撇号,则需要对它们进行URLEncoded编码,而不能使用前导反斜杠进行转义。对于该用途URLEncoder.encode(String, String)(顺便说一句:第二个参数应始终为"UTF-8")。其次,如果要用反斜杠撇号替换所有的撇号实例,则必须在字符串表达式中使用反斜杠将反斜杠转义。像这样:
URLEncoder.encode(String, String)
"UTF-8"
"This is' it".replace("'", "\\'");
现在,我知道您可能正在尝试动态构建SQL语句。 不 要这样做。您的代码将容易受到SQL注入攻击。而是使用PreparedStatement。
PreparedStatement