4

RFC 2396によると、

プラス「+」、ドル「$」、およびコンマ「、」文字は
、クエリコンポーネント内で予約済みとして扱われるため、「予約済み」セットの文字に追加されました。

確かに、このサイトで「プラス+コンマ、ドル$」を検索すると、次のようになります。

https://stackoverflow.com/search?q=plus+%2B+comma+,+dollar+ $

Plusは、区切り文字として使用されていない場合にのみ(アプリケーションによって)エンコードされます。

しかし、他の人が観察しているように、.NETのUrlDecode関数はプラスをスペースに変換します。この動作はどこで指定されていますか?

4

1 に答える 1

7

この動作はどこで指定されていますか?

不思議なことに、HTML仕様です

UrlDecode誤解を招くような名前が付けられています。

+application/x-www-form-urlencodedHTMLで定義されているデータ内のスペースのみを表します。つまり、フォームのPOST送信リクエスト本文または?queryURLの一部のいずれかです。これは特別な場合です!URLの他の場所では、プラスは単なるプラスです。

http://www.example.com/path+path/x?query+name=query+value

このURLでは、パラメータquery nameはに設定されていquery valueます。これは、GETフォームでこのフォームフィールドを送信することによって生成される場合があります。

<input name="query name" value="query value">

ただし、フォルダ名は文字通りpath+pathです。立つ瀬がない。

これは混乱を招き、あいまいになる可能性があるため、最善のアプローチは常にスペースをにエンコードすること%20です。UrlPathEncodeを使用して.NETでこれを行うことができます。これは、URLのクエリ部分とパスの両方で同じように機能します。

于 2010-04-23T18:20:28.527 に答える