web-dev-qa-db-ja.com

Java問題を '(アポストロフィ/単一引用符)と\(バックスラッシュ)で一緒に置き換えます

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

サンプルコードを次に示します。

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

助言がありますか?私はただ' with \'

そんなに難しいことではないようです。

24
derekmw

まず、クエリ文字列のアポストフをエンコードする場合、先頭のバックスラッシュでエスケープせずにURLEncodeにする必要があります。そのためには URLEncoder.encode(String, String) を使用します(ところで:2番目の引数は常に"UTF-8")。第二に、アポストフのすべてのインスタンスをバックスラッシュアポストロフィに置き換える場合は、文字列式のバックスラッシュを先頭のバックスラッシュでエスケープする必要があります。このような:

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

編集:

おそらく、SQLステートメントを動的に構築しようとしていることがわかります。 このようにしないでください。コードはSQLインジェクション攻撃を受けやすくなります。代わりにPreparedStatementを使用してください。

33
Asaph

"This is' it".replace("'", "\\'")を使用します

4
Marcelo

アポストロフィの特殊文字を処理するためにトリックを使用しました。 'を\に置き換える場合、アポストロフィの前に4つのバックスラッシュを配置する必要があります。

str.replaceAll("'","\\\\'");
3
Sanjay Saini

JavaScriptで使用する場合は、次を使用できます。

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

しかし、Java

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

完全に動作します。

SP:特殊文字

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

1
santosh Singh

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

stringToEdit = stringToEdit.replaceAll("'", "\\'");
0
Gooby

例:

String teste = " 'Bauru '";

teste = teste.replaceAll("  '  ","");
JOptionPane.showMessageDialog(null,teste);

利用した

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

文字列内の一重引用符を置き換えるために。私にとってはうまく機能しています。