[解決済み] encodeURI / encodeURIComponentの代わりにescapeを使用するのはどのような場合ですか?
質問
ウェブサーバーに送信するクエリー文字列をエンコードする場合、どのような場合に
escape()
を使用し、どのような場合に
encodeURI()
または
encodeURIComponent()
:
エスケープを使用します。
escape("% +&=");
または
encodeURI() / encodeURIComponent() を使用します。
encodeURI("http://www.google.com?var1=value1&var2=value2");
encodeURIComponent("var1=value1&var2=value2");
解決方法は?
エスケープ()
使わないでください
escape()
は、セクション
B.2.1.2 エスケープ
と、その
附属書Bの導入文
と書かれています。
... この附属書で指定されたすべての言語機能および動作は,一つ以上の望ましくない特性を有しており,レガシーな使い方がなければ,この仕様から削除されるであろう。...
... プログラマは、新しい ECMAScript コードを書くときに、これらの機能や動作を使用したり、その存在を仮定したりしてはいけません ....
ビヘイビア(振る舞い)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
特殊文字は例外として符号化されます。@*_+-./
コード単位が 0xFF 以下の文字の 16 進表記は、2 桁のエスケープシーケンスとなります。
%xx
.
コード単位が大きい文字には、4桁のフォーマット
%uxxxx
が使用されます。これは、クエリ文字列内では許されない(以下のように定義される)。
RFC3986
):
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
パーセント記号は、16進数2桁が直接続く場合にのみ使用可能で、パーセントの後に
u
は許可されません。
encodeURI()
作業用のURLが必要な場合はencodeURIを使用します。この呼び出しを行う。
encodeURI("http://www.example.org/a file with spaces.html")
を取得する。
http://www.example.org/a%20file%20with%20spaces.html
encodeURIComponentを呼び出すと、URLを破壊して
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html
encodeURIはencodeURIComponentと同様に'文字をエスケープしないことに注意してください。
encodeURIComponent()
URLパラメータの値をエンコードする場合は、encodeURIComponentを使用します。
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
そして、必要なURLを作成することができます。
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
そして、このような完全なURLを取得します。
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
encodeURIComponent は
'
文字を使用します。よくあるバグは、これを用いて html の属性である
href='MyUrl'
インジェクションバグが発生する可能性があります。文字列からhtmlを作成する場合は、以下のいずれかの方法で行ってください。
"
の代わりに
'
を使うか、エンコーディングのレイヤーを増やすか (
'
は%27としてエンコードされます)。
この種のエンコーディングの詳細については、確認することができます。 http://en.wikipedia.org/wiki/Percent-encoding
関連
-
要素ツリー制御によるvueTreeテーブル
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] JavaScriptで二重引用符と単一引用符はいつ使うべきですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] C#でURLのクエリ文字列を作成するには?
-
[解決済み] chromedriverでSeleniumを使用していることをWebサイトで検出することは可能ですか?
-
[解決済み] URLのエンコードにはencodeURIとencodeURIComponentのどちらを使うべきですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Vue+ElementUIによる大規模なフォームの処理例
-
vueにおけるv-forループオブジェクトのプロパティ
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
Vueのフィルタの説明
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み】"フォームが接続されていないため、フォームの送信がキャンセルされました "というエラーの取得について
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み] URLのエンコードにはencodeURIとencodeURIComponentのどちらを使うべきですか?