27

我好像有问题。我有一个查询字符串,其值可以包含单引号。这将破坏查询字符串。所以我试图进行替换以更改'\'.

这是一个示例代码:

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

有什么建议么?我只想将 a 替换'\'.

看起来应该没那么难。

4

7 回答 7

35

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

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

编辑:

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

于 2011-06-06T21:35:22.993 回答
5

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

于 2011-06-06T21:34:20.490 回答
4

我使用了一个技巧来处理撇号特殊字符。替换 ' for \' 时,您需要在撇号前放置四个反斜杠。

str.replaceAll("'","\\\\'");
于 2015-06-15T06:36:31.657 回答
1

如果你想在 JavaScript 中使用它,那么你可以使用

str.replace("SP","\\SP");

但是在Java中

str.replaceAll("SP","\\SP");

将完美地工作。

SP:特殊字符

否则你可以使用 Apache 的 EscapeUtil。它会解决你的问题。

于 2014-03-20T07:32:31.000 回答
0

请记住,stringToEdit.replaceAll(String, String) 返回结果字符串。它不会修改 stringToEdit,因为字符串在 Java 中是不可变的。要坚持任何更改,您应该使用

stringToEdit = stringToEdit.replaceAll("'", "\\'");
于 2015-06-26T20:20:44.583 回答
0

例子 :

String teste = " 'Bauru '";

teste = teste.replaceAll("  '  ","");
JOptionPane.showMessageDialog(null,teste);
于 2017-04-06T16:25:40.850 回答
-1

我用过

str.replace("'", "");

替换我的字符串中的单引号。它对我来说工作正常。

于 2013-05-23T02:48:52.663 回答