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

2022-09-01 15:40:46

我似乎遇到了问题。我有一个查询字符串,其值可以包含单引号。这将中断查询字符串。所以我试图做一个替换来更改为.'\'

下面是一个示例代码:

"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

上述两种仍然产生相同的输出:

"This is' it"

我似乎只能让它实际上吐出一个斜杠:

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

这导致:

"This is\\' it"

有什么建议吗?我只想用.'\'

这似乎并不那么困难。


答案 1

首先,如果您尝试为查询字符串对撇号进行编码,则需要对它们进行 URL 编码,而不是使用前导反斜杠进行转义。为此,请使用URLEncoder.encode(String,String)(BTW:第二个参数应始终为)。其次,如果要将撇号的所有实例替换为反斜杠撇号,则必须使用前导反斜杠对字符串表达式中的反斜杠进行转义。喜欢这个:"UTF-8"

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

编辑:

我现在看到您可能正在尝试动态构建 SQL 语句。不要这样做。您的代码将容易受到 SQL 注入攻击。请改用 .PreparedStatement


答案 2

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