%2520
Firefox ブラウザにファイル名を渡すと、スペースが ではなく に置き換えられます%20
。
というファイルに次の HTML がありますmyhtml.html
:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
Firefox に読み込むとmyhtml.html
、画像が壊れた画像として表示されます。そこで、画像を表示するためにリンクを右クリックすると、次の変更された URL が表示されます。
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
^
^-----Firefox changed my space to %2520.
一体何なの?私のスペースが に変換されました%2520
。 に変換するべきではないですか%20
?
ブラウザが画像を見つけられるようにこの HTML ファイルを変更するにはどうすればよいですか? ここでは何が起こっているのですか?
ベストアンサー1
それが何であるかを少し説明します%2520
:
共通スペース文字は、%20
ご指摘のとおり としてエンコードされます。%
文字は としてエンコードされます%25
。
取得する方法%2520
は、URL にすでに が含まれており%20
、再度 urlencode されて が に変換される場合%20
です%2520
。
あなた (またはあなたが使用しているフレームワーク) は文字を二重にエンコードしていますか?
編集:これについてもう少し詳しく説明すると、特に地元リンク。リソースにリンクしたいと仮定しますC:\my path\my file.html
。
- ローカル ファイル パスのみを指定すると、ブラウザーは、
%
適切な URL (次のポイントを参照) に変換するときに、指定されたすべての文字をエンコードして保護することが期待されます (上記の例では、 は有効なファイル名文字であるため、示されているようにスペースを付けて指定する必要があります)。 - プロトコルを使用して URL を提供する場合
file://
、基本的にはすべての予防措置を講じてエンコードが必要なものだけをエンコードし、残りは特殊文字として扱う必要があることを表明することになります。上記の例では、 を提供する必要がありますfile:///c:/my%20path/my%20file.html
。スラッシュを修正する以外に、クライアントはここで文字をエンコードすべきではありません。
ノート:
- スラッシュの方向 -
/
URL ではスラッシュが使用され、\
Windows パスでは逆スラッシュが使用されますが、ほとんどのクライアントは、適切なスラッシュに変換することで両方を操作します。 - さらに、プロトコル名の後に 3 つのスラッシュがありますが、これは、リモート ホストではなく現在のマシンを暗黙的に参照しているためです (完全な非省略パスは になります
file://localhost/c:/my%20path/my%file.html
)。ただし、ほとんどのクライアントは、ローカル マシンを意味していると想定して 3 番目のスラッシュを追加することで、ホスト部分 (つまり、2 つのスラッシュのみ) なしで動作します。