27

私は問題を抱えているようです。一重引用符を含むことができる値を持つクエリ文字列があります。これにより、クエリ文字列が壊れます。'だから私はに変更するために置換をしようとしていました\'

サンプルコードは次のとおりです。

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

この出力はまだ次のとおりです。

"This is' it".

引用のエスケープ文字を実行しているだけだと思います。

そこで、次の 2 つのコードを試しました。

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

助言がありますか?'aをに置き換えたいだけです\'

それほど難しいことではないようです。

4

7 に答える 7

35

まず第一に、クエリ文字列のアポス トフィをエンコードしようとしている場合は、先頭のバックスラッシュでエスケープするのではなく、URL エンコードする必要があります。その使用のためにURLEncoder.encode(String, String)(ところで:2番目の引数は常にでなければなりません"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 \' を置き換える場合、アポストロフィの前に 4 つのバックスラッシュを配置する必要があります。

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

JavaScriptで使用したい場合は、使用できます

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

しかしジャバでは

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

完全に動作します。

SP:特殊文字

それ以外の場合は、Apache の EscapeUtil を使用できます。それはあなたの問題を解決します。

于 2014-03-20T07:32:31.000 に答える
0

stringToEdit.replaceAll(String, String) 結果文字列を返すことを忘れないでください。Java では文字列は不変であるため、stringToEdit は変更されません。変更を固定するには、次を使用する必要があります

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 に答える