3

サーバーへの http-get リクエストを実行するときにまだ理解できないのは、JS 関数の encodeURIcomponent を使用して http-get の各コンポーネントをエンコードすることの利点です

サーバーが(PHPを使用して)見たいくつかのテストを実行すると、encodeURIcomponentを使用しない場合でも、http-getリクエストの値が適切に取得されます。 明らかに、クライアント レベルで特殊文字 & ? をエンコードする必要があります。= / : そうしないと、この "peace&love=virtue" のような http-get 値は、1 つの値ではなく、http-get リクエストの新しいキーと値のペアと見なされます。しかし、encodeURIcompenent は、たとえば 'è' などの他の多くの文字もエンコードするのはなぜですか。これは、utf8_decode 関数を使用して PHP サーバーでデコードする必要がある %C3%A8 に変換されます。

encodeURIcomponent を使用することで、http-get リクエストのすべての値が utf8 でエンコードされるため、PHP でそれらを取得するときに、毎回 $_GET 値ごとに utf8_decode 関数を呼び出さなければならず、これは非常に面倒です。

& だけをエンコードできないのはなぜですか? = / : 文字?

参照: JS encodeURIComponent の結果が FORM によって作成された結果と異なる 単純なブラウザの FORM GET が「€」などの文字を別の方法でエンコードするため、encodeURIComponent が正しくエンコードされていないことも示されています。それで、このencodeURIComponentは何のためにあるのだろうか?

4

2 に答える 2

7

その理由は

Uniform Resource Identifier (URI) は、[RFC3986] で、 US-ASCII [ASCII]文字のレパートリーの限られたサブセットから選択された一連の文字として定義されています。

そのため、正式には Unicode はサポートされていません。詳細については、RFCを参照してください。ただし、最新のブラウザはすべてそれをサポートしているため、結果が問題なく得られます..しかし、一部のブラウザまたはシステムがそれをサポートしていないという奇妙なケースでは、それをエンコードし、すべての標準準拠のブラウザで正常に動作することを確認します..

于 2010-02-10T16:40:57.740 に答える
5
于 2010-04-11T11:32:34.377 に答える