1. ホーム
  2. urlencode

なぜurlencodeを使う必要があるのですか?

2023-09-19 04:43:26

質問

私はWebアプリケーションを書き、htmlリンクをurlencodeする方法を学んでいます....

ここでのすべてのurlencodeの質問(下のタグを参照)は、"どのように..."質問です。

私の質問は、"どのように?"ではなく、"なぜ?"です。

wikipediaの記事でも、その仕組みについてしか触れていません。

http://en.wikipedia.org/wiki/Urlencode ではなく なぜ 私は全く私のアプリケーションでurlencodeを使用する必要があります。

はどのようなものですか? セキュリティ を使用する(あるいはむしろ使用しない)ことの意味は何ですか?

urlencode を使用する失敗は、どのようにして を利用することができるのでしょうか? ?

どのような バグ や失敗は、エンコードされていないURLで発生する可能性がありますか?

私は、urlencodeなしでも、次のような私のアプリケーション開発Webサイトへのリンクが期待どおりに動作するため、質問しています。 http://myapp/my%20test/ée/ràé

なぜ はurlencodeを使うべきでしょうか?

別の言い方をすると

いつ はurlencodeを使うべきですか?どのような状況で?

どのように解決するには?

更新しました。 さらに上にさらに良い説明(imo)があります。

URI は文字の並びとして表現され、オクテットの並びとしては表現されません。 オクテットのシーケンスとしてではなく、文字のシーケンスとして表されます。これは、URI がコンピュータネットワークを介さない手段、たとえば紙に印刷されたり読み取られたりすることで輸送される可能性があるためです。 URIは、紙に印刷される、無線で読まれるなど、コンピュータネットワークを介さない手段で輸送されることがあるからです。 無線で読むなどです。

そして

非ASCII文字を含むオリジナルの文字列の場合。 しかし、状況はより困難です。インターネット プロトコルで は、文字シーケンスを表すために意図されたオクテットシーケンスを送信する は、使用された文字セットを識別する何らかの方法を提供することが期待されています(複数の文字セットがある場合)[RFC2277]。 RFC2277]があります。 しかし,現在 この識別を行うための一般的なURIの構文には規定がない。 を識別するための規定はない。個々のURIスキームは、単一の charsetを要求するか、デフォルトのcharsetを定義するか、または使用されるcharsetを示す方法を提供する。 を示す方法を提供するかもしれません。


に記載されているため RFC :

<ブロッククオート

2.4. エスケープシーケンス

を使った表現がない場合、データをエスケープしなければなりません。 これには、US-ASCII コード化文字集合の印刷可能な文字に対応しないデータ US-ASCIIコード化文字集合の印刷可能な文字に対応しないデータ、または このデータには、US-ASCIIコード化文字集合の印刷可能な文字に対応しないデータ、または以下に説明するように、許可されないUS-ASCII文字に対応するデータが含まれます。 以下に説明します。

2.4.2. エスケープとアンエスケープを行うタイミング

URIは常にquot;escape"された状態です。 というのも、完成した URI をエスケープまたはアンエスケープすると、そのセマンティクスが変更される可能性があるからです。 通常 エスケープエンコーディングを安全に行うことができるのは、URIがその構成要素から作成されるときだけです。 各コンポーネントはそれ自身の予約された文字のセットを持つかもしれません。 各コンポーネントは、予約されている文字の独自のセットを持つかもしれません。 各コンポーネントは予約されている文字のセットを持つかもしれないので、 そのコンポーネントを生成または解釈する責任を負うメカニズムだけが、文字を エスケープすることでそのセマンティクスが変化するかどうかを決定することが できます。同様に,URI はその構成要素に分離されなければならず、その構成要素内のエスケープされた文字が安全に解読される前に を安全にデコードできるように、URI はその構成要素に分離されなければなりません。

場合によっては、予約されていない文字で表現されるデータがエスケープされているように見えることがあります。 例えば、一部の予約されていない マークは自動的にエスケープされるシステムもあります。 もし 与えられたURIスキームが正規化アルゴリズムを定義しているならば は、そのアルゴリズムに従ってエスケープされないかもしれません。 たとえば、httpのURLのパスで"~"の代わりに"%7e"が使われることがあります。 のパスで使われることがありますが、httpのURLではこの2つは等価です。

パーセント文字 "%"は常にエスケープ インジケータとして予約された目的を持っているため、この文字を使用することはできません。 エスケープ インジケーターとして予約されているため、URI 内のデータとして使用するには、"%25" としてエスケープする必要があります。 としてエスケープされなければならない。 実装者は,同じ文字列をエスケープまたはアンエスケープしないように注意する必要があります。 同じ文字列を複数回エスケープまたはアンエスケープしないように、実装者は注意する必要があります。 すでにエスケープされている文字列をエスケープ解除すると、パーセントデータ文字を別のエスケープされた文字と誤認してしまう可能性があるからです。 データ文字を別のエスケープされた文字と誤解してしまうかもしれません。 すでにエスケープされている文字列をエスケープする場合はその逆です。