URLパラメータの文字に+(プラス)記号が含まれても空白となる
エンコードが必要
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1458834059
URLパラメータで使える文字について
サーブレットの中でURL文字列を生成して画面遷移をする処理があります。
このサーブレットではチェック処理をおこなっていて、エラーがあれば、その内容を
エラーメッセージとしてURLパラメータに渡しています。
エラーメッセージのなかに「XXX + XXXXです。」のようなものがあるのですが
遷移先のページでは「XXX XXXXです。」とプラスが表示されません。
プラスは表示できないのでしょうか?
URL で + は空白扱いです。%2B を使います
Javascriptで
URLエンコードする方法
(記号を含めてエンコードする場合は、「encodeURIComponent」)
URLエンコード(文字列 → エンコード文字)を行うには、encodeURIComponent/encodeURIを使用します
[JavaScript] URLエンコード/デコードを行う
投稿日:2016年10月1日 更新日:2018年4月28日
URLエンコード/デコードを行うサンプルです。
URLエンコードを行う
URLエンコードを行うには、encodeURIComponentまたはencodeURIを使います。
例)encodeURIComponentを使うパターン
【JavaScript】JavaScript
1 | var result = encodeURIComponent(‘あいう?&ABC’); |
(結果)%E3%81%82%E3%81%84%E3%81%86%3F%26ABC
例)encodeURIを使うパターン
【JavaScript】JavaScript
1 | var result = encodeURI(‘あいう?&ABC’); |
(結果)%E3%81%82%E3%81%84%E3%81%86?&ABC
URLデコードを行う
URLデコードを行うには、decodeURIComponentまたはdecodeURIを使います。
例)decodeURIComponentを使うパターン
【JavaScript】JavaScript
1 | var result = decodeURIComponent(‘%E3%81%82%E3%81%84%E3%81%86%3F%26ABC’); |
(結果)あいう?&ABC
例)decodeURIを使うパターン
【JavaScript】JavaScript
1 | var result = decodeURI(‘%E3%81%82%E3%81%84%E3%81%86%3F%26ABC’); |
(結果)あいう%3F%26ABC
解説
- URLエンコード(文字列 → エンコード文字)を行うには、encodeURIComponent/encodeURIを使用します。
- URLデコード(エンコード文字 → 文字列)を行うには、decodeURIComponent/decodeURIを使用します。
- Componentが付くか付かないかの違いは、URI文字で特別な意味を持つ記号等(?&/=@;:+$,)を変換するかしないかの違いです。
https://javascript.programmer-reference.com/js-url-encode-decode/
URLエンコード文字一覧
https://www.ipentec.com/document/web-url-invalid-char
URLで使用可能な文字、使用できない文字
URLで使用できる文字、できない文字、使用できないパターンを紹介します。
URLの検出や正規表現での記載方法はこちらの記事を参照してください。
概要
URLで利用できる文字は、RFC2396 と RFC3986 に定義されていますが、定義が微妙に違います。
RFC2396
使用可能な文字
- アルファベット A-Z a-z
- 数字 0-9
使用可能な記号 (RFC2396 の mark)
- –
- _
- .
- !
- *
- ‘
- (
- )
“*”はファイル名やディレクトリ名に”*”を使用できないため実質的には使用不可
区切り文字として除外されているもの (RFC2396 の reserved)
以下の文字は使用できません
- <
- >
- #
- “
- %
“#”はURI参照として、”%”はエスケープ用文字として使われます。
除外されている記号 (RFC2396 に定義がないもの)
以下の文字は使用できません。
- {
- }
- |
- \
- ^
- [
- ]
- `
- :
- ?
- #
- /
- ?
- :
- @
- %
- !
- $
- &
- ‘
- (
- )
- *
- +
- ,
- ;
- =
- アルファベット A-Z a-z
- 数字 0-9
- –
- .
- _