28

私は考えていた...

(クエリ文字列の base64 の plus'+' 記号に関する問題は除きます。これは「スペース」に変換され、%2b で解決できます) :---> クエリ文字列でデータを転送するための推奨される方法はどれですか?

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

  • btoa
  • encodeUriComponent

だから私は自分自身(そしてあなた)に尋ねます:

いつを使うべきですか?(私は常に使用されています encodeUriCompoonent-本能による)。

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

編集

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

ここに画像の説明を入力

4

3 に答える 3

17

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

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

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

于 2012-04-22T11:46:20.237 に答える
3

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

「+」はクライアントによって「スペース」に変換されません。一部のサーバー側アプリでは、主に後方互換性の理由で「スペース」に自動変換されます (逆に、一部のサーバー側アプリでは「+」そのまま残ります)。 RFC3986に準拠した「+」 )。

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

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

于 2012-04-22T11:53:17.437 に答える
-1

fwiw、サーバーとクライアントの間でユニコードにできるものを転送したいときはいつでもbase64を使用します。urlencode は、すべての Unicode 文字をうまく処理できるわけではありません。すべてのパーセント記号ですぐに混乱します。

つまり、要するに、ユニコードの入出力を期待して、常にbase64で輸送します。

于 2012-04-22T11:46:10.873 に答える