web-dev-qa-db-ja.com

url-encode vs Base64エンコーディング(使用法)?

私は考えていた...

(クエリ文字列のbase64のプラス '+'記号の問題を除きます-これは 'space'に変換され、%2bで解決できます): --->クエリ文字列でデータを転送するための好ましい方法はどれですか?

どちらの機能もJSコマンドを介して使用できます。

  • btoa
  • encodeUriComponent

だから私自身(そしてあなた)に尋ねる:

いつ使用すべきかwhat? (常に使用されるencodeUriCompoonent-本能による)。

定義が異なるという問題-しかし、実装は似ている可能性があります...

編集する

私は尋ねる理由を見つけたと思います...(そしてなぜ誰も以前にそれを尋ねなかった理由)

enter image description here

27
Royi Namir

base64は、バイナリデータの転送に使用されます。 (IEではサポートされていません。空間文字をエンコードできません。)

encodeURIComponentは特殊文字のみをエンコードします。

興味深いのは、encodeURIComponentがないと、Uni64文字列にbase64を適用できないことです。 https://developer.mozilla.org/en/DOM/window.btoa

12
meze

これに対する答えは、サーバー側のアプリケーションに完全に依存しています。

'+''space'に変換されません=クライアントによって-それは'space'に自動翻訳されますサーバーサイドアプリ、主に下位互換性のため(逆に、一部のサーバーサイドアプリは'+''+'RFC3986 に準拠)。

クライアントに関する限り-btoa()およびencodeURIComponent()(およびencodeURI()およびescape())は、テキストの文字列を異なる抽象化されたものにエンコードするだけですさまざまなエンコーディングまたはエスケープアルゴリズムによる文字列-btoa()は通常、base64エンコーディングを使用して最小の結果文字列を生成しますが、 mezeのコメント) re:unicodeはここで考慮する価値があります。

注意すべき重要な点は、サーバー側のアプリケーション(場合によってはASP.NETベースのセットアップ)が何を使用してその文字列を元の形式にデコードするかです。

3
lucideer