[解決済み] クエリ文字列パラメータのJava URLエンコーディング
質問
あるURLがあるとする
http://example.com/query?q=
というような、ユーザーから入力されたクエリーがあるのですが。
ランダムワード £500 bank $
結果を正しくエンコードされたURLにしたい。
http://example.com/query?q=random%20word%20%A3500%20bank%20%24
これを実現するには、どうしたらいいのでしょうか?私が試したのは
URLEncoder
を作成したり、URI/URLオブジェクトを作成したりしましたが、どれもなかなかうまくいきません。
どのように解決するのですか?
URLEncoder
が、その方法です。をエンコードすることだけを念頭に置く必要があります。
のみ
は、URL全体ではなく、個々のクエリ文字列パラメータ名および/または値であり、もちろんクエリ文字列パラメータ分離文字
&
また、パラメータ名と値の区切り文字である
=
.
String q = "random word £500 bank $";
String url = "https://example.com?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);
まだJava 10以降でない場合は
StandardCharsets.UTF_8.toString()
を charset 引数として指定するか、あるいは Java 7 以降では
"UTF-8"
.
クエリパラメータに含まれるスペースは
+
ではなく
%20
であり、正規に有効である。その
%20
は通常、URI自体のスペースを表すために使用されます(URI-クエリ文字列の区切り文字である
?
の後の部分)ではなく、クエリ文字列の中にあります。
?
).
また、3つの
encode()
メソッドがあります。1つは
Charset
を第2引数として、もう1つは
String
を第二引数として渡すと、チェックされた例外が投げられます。一方
Charset
引数は非推奨です。決して使用せず、必ず
Charset
引数で指定します。また
ジャバドック
で義務付けられているように、UTF-8 エンコードを使用するよう明示的に推奨しています。
RFC3986
と
W3C
.
それ以外の文字は安全ではなく、まず何らかの符号化方式で1つ以上のバイトに変換される。そして、各バイトは3文字の文字列 "%xy"で表され、xy はそのバイトの2桁の16進数表現となる。 推奨されるエンコード方式はUTF-8です。 . ただし、互換性の観点から、エンコーディングが指定されていない場合は、そのプラットフォームのデフォルトエンコーディングが使用されます。
こちらもご覧ください。
関連
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
[解決済み] ブラウザによって異なるURLの最大長とは?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] JavaScriptでURLをエンコードする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
IllegalArgumentException この例外を解決する方法
-
ファインバグタイプ
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
javaでよく使われる英単語
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について