一尘不染

Java用'(撇号/单引号)和\(反斜杠)一起替换问题

java

我似乎有问题。我有一个查询字符串,其值可以包含单引号。这将中断查询字符串。因此,我试图进行替换以更改'\'

这是一个示例代码:

"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"

有什么建议?我只是想更换一个'\'

似乎应该没有那么困难。


阅读 443

收藏
2020-12-03

共1个答案

一尘不染

首先,如果您要对查询字符串编码撇号,则需要对它们进行URLEncoded编码,而不能使用前导反斜杠进行转义。对于该用途URLEncoder.encode(String, String)(顺便说一句:第二个参数应始终为"UTF-8")。其次,如果要用反斜杠撇号替换所有的撇号实例,则必须在字符串表达式中使用反斜杠将反斜杠转义。像这样:

"This is' it".replace("'", "\\'");

编辑:

现在,我知道您可能正在尝试动态构建SQL语句。 要这样做。您的代码将容易受到SQL注入攻击。而是使用PreparedStatement

2020-12-03