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. jQuery - 変数をURLエンコードする必要がありますか?
- 4. encodeURI相当のものは必要ありませんencodeURIComponent()と同等のURLEncoder.encode
- 5. 印象を追跡するためにログファイルまたはDBを使用する必要がありますか?
- 6. PythonでテストするためにTestCaseまたはFunctionTestCaseを使用する必要がありますか?
- 7. アプリケーションにAsyncTaskまたはIntentServiceを使用する必要がありますか?
- 8. Python3でエンコード宣言を使用する必要がありますか?
- 9. iOSはNSMutableArrayまたはNSMutableDictionaryを使用する必要がありますか?
- 10. 私はurandomまたはopenssl_random_pseudo_bytesを使用する必要がありますか?
- 11. タイトルタグをHTMLエンコードする必要がありますか?
- 12. PhobosまたはTangoを使用する必要がありますか?
- 13. AppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?
- 14. scipy.pi、numpy.pi、またはmath.piを使用する必要がありますか?
- 15. タイマー、ハンドラ、またはASyncTaskを使用する必要がありますか?
- 16. GetまたはLoad-nhibernateを使用する必要がありますか?
- 17. Drupal 6またはDrupal 7を使用する必要がありますか?
- 18. オブジェクトリテラルまたはコンストラクタ関数を使用する必要がありますか?
- 19. Cloudantでセレクタまたはビューを使用する必要がありますか?
- 20. WFでステートマシンまたはシーケンスワークフローを使用する必要がありますか?
- 21. SQLiteデータベースバージョン2.1または3.0を使用する必要がありますか?
- 22. .Net 4.5:IDataErrorInfoまたはINotifyDataErrorInfoを使用する必要がありますか?
- 23. NavigatorまたはView Stateを使用する必要がありますか?
- 24. テキストファイルまたはデータベースを使用する必要がありますか?
- 25. RSAProtectedConfigurationProviderまたはMy Own Providerを使用する必要がありますか?
- 26. リスナーまたはオブザーバーを使用する必要がありますか?
- 27. ビューでディスパッチイベントまたはファイアイベントを使用する必要がありますか?
- 28. CouchDBまたはSimpleDBを使用する必要がありますか?
- 29. JavaScriptでwindow.navigateまたはdocument.locationを使用する必要がありますか?
- 30. データセットまたはデータテーブルを使用する必要がありますか?
また参照してくださいhttp://stackoverflow.com/a/3608791/632951 – Pacerier
大きな違いの1つは、 'encodeURI'は'/'をエンコードしないということです:' encodeURIComponent( "ac/dc") '=>' ac %2Fdc'と 'encodeURI(" ac/dc ")' => 'ac/dc' – JoeRocc