URLのエンコードにこれらの2つの方法のどちらを使用する必要がありますか?URLをエンコードするためにencodeURIまたはencodeURIComponentを使用する必要がありますか?
答えて
実際に何をしたいかによって異なります。
encodeURIは、入力が、エンコーディングを必要とする文字を含む完全なURIであるとみなします。
encodeURIComponentでは特別な意味を持つすべてのものをエンコードしますので、あなたがその例で、そのよう
var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);
http://xkr.us/articles/javascript/encode-compare/偉大な議論を持っているとして、URIのコンポーネントのためにそれを使用します。
"エスケープ()メソッドは、サーバー側のスペースとして解釈される+文字をエンコードせず、フィールドにスペースを含むフォームによって生成されます。この欠点と事実この機能が正常に非ASCII文字を処理するために失敗したことを、可能な限り、あなたはエスケープ()の使用を避けるべき最善の選択肢は、通常encodeURIComponentである()
エスケープを()をエンコードしません:。。@ */+
encodeURI()メソッドの使用は、URLの一部であるクエリーストリングではなく、URIをエンコードする点でescape()よりも少し特殊です。文字列をbにエンコードする必要がある場合は、このメソッドを使用しますURIを使用し、エンコードされないままにする特定の文字を必要とするすべてのリソースに使用されます。このメソッドはURI内の有効な文字であるため、 '文字をエンコードしません。
encodeURI()はエンコードしません:〜@#$ & *()=:/、; +」
最後に、encodeURIComponentで()単一のコンポーネントを符号化する際の方法は、ほとんどの場合に使用されなければなりません!? URIのこのメソッドは、多くのコンポーネントが含まれるように、URIの特殊文字として通常認識される特定の文字をエンコードします。このメソッドはURI内の有効な文字であるため、 '文字をエンコードしません。
encodeURIComponentで()をエンコードしません。!〜*() '」
encodeURIComponentでは、():引数が(そのようなプロトコル、ホスト名、パス、またはクエリ文字列など)部分の であることを前提としてい。URIは、そのためには、portionsof URIを分離するために使用される句読点文字をエスケープ
encodeURI():ケースで既存のURL
を符号化するために使用されますが、あまりにもこれらの文字をエンコードしたい:! ' *) (
、その後、 をソリューションは:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
(source)原則使用encodeURIComponent
として
。それがより一般的な方法だと私には、それがより具体的であると思う長い名前を恐れてはいけません。また、エンコードユリを使ってテストし、正しくエンコードされているように見えますが、おそらくあなたが使用しようとしていたものではなく、ファーストネームフィールドで「フレッド」を使った簡単なテストが機能していても、後でアンパサンドやハッシュタグを追加するなど、より高度なテキストを使用すると失敗します。これがなぜなのか他の答えを見ることができます。
- 1. postAjaxリクエストのパラメータをエンコードするためにencodeURIComponentを使用する必要がありますか?
- 2. これまでにencodeURIを使用する必要がありますか?
- 3. encodeURI相当のものは必要ありませんencodeURIComponent()と同等のURLEncoder.encode
- 4. jQuery - 変数をURLエンコードする必要がありますか?
- 5. イメージのBase64 URLをエンコードする必要がありますか?
- 6. ビデオやビデオのURLを保存するためにデータベースを使用する必要がありますか?
- 7. 印象を追跡するためにログファイルまたはDBを使用する必要がありますか?
- 8. PythonでテストするためにTestCaseまたはFunctionTestCaseを使用する必要がありますか?
- 9. HttpUrl.Builder.addPathSegment%2Aはアスタリスクをエンコードする必要がありますか?
- 10. より良いアプリケーションサイズを得るためにコアデータまたはSQLiteを使用する必要があります
- 11. htmlを「隠す」ためにPHPまたはCSSを使用する必要がありますか?
- 12. 設定データをキャッシュするためにプロパティまたはディクショナリオブジェクトを使用する必要があります
- 13. Redshift SQLを最適化するためにinまたはnotを使用する必要があります
- 14. アプリケーションにAsyncTaskまたはIntentServiceを使用する必要がありますか?
- 15. WebアプリケーションでクリーンURLまたはURLパラメータを使用する必要がありますか?
- 16. Python3でエンコード宣言を使用する必要がありますか?
- 17. 通知のためにJenkinsヘビー級またはフライウェイトエグゼキュータを使用する必要がありますか?
- 18. iOSはNSMutableArrayまたはNSMutableDictionaryを使用する必要がありますか?
- 19. 私はurandomまたはopenssl_random_pseudo_bytesを使用する必要がありますか?
- 20. タイトルタグをHTMLエンコードする必要がありますか?
- 21. ServiceStackメタデータページのリンクをエンコードする必要がありますか?
- 22. json.dumps(...)の後にエンコードする必要がありますか?
- 23. 名前付きルートに(URLエンコードされた)クエリーストリングを追加する必要がありますか?
- 24. AppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?
- 25. Cloudantでセレクタまたはビューを使用する必要がありますか?
- 26. JavaScriptでwindow.navigateまたはdocument.locationを使用する必要がありますか?
- 27. データセットまたはデータテーブルを使用する必要がありますか?
- 28. ビューでディスパッチイベントまたはファイアイベントを使用する必要がありますか?
- 29. JComboBoxでEnumまたはStringを使用する必要がありますか?
- 30. Developer EntityまたはUser Entityを使用する必要がありますか?
また参照してくださいhttp://stackoverflow.com/a/3608791/632951 – Pacerier
大きな違いの1つは、 'encodeURI'は'/'をエンコードしないということです:' encodeURIComponent( "ac/dc") '=>' ac %2Fdc'と 'encodeURI(" ac/dc ")' => 'ac/dc' – JoeRocc