1. ホーム
  2. html

[解決済み] htmlのスペースが%20ではなく、%2520と表示される。

2022-03-10 04:31:25

質問

Firefoxブラウザにファイル名を渡すと、空白を次のように置き換えます。 %2520 の代わりに %20 .

というファイルに、以下のようなHTMLを記述しています。 myhtml.html :

<img src="C:\Documents and Settings\screenshots\Image01.png"/>

を読み込むと myhtml.html をfirefoxで表示すると、画像が壊れて表示されます。 そこで、画像を見るためにリンクを右クリックすると、このように修正されたURLが表示されます。

file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
                    ^
                    ^-----Firefox changed my space to %2520.

なんじゃこりゃー。 私のスペースが %2520 . に変換すべきではありません。 %20 ?

ブラウザが私の画像を見つけることができるように、このHTMLファイルを変更するにはどうすればよいのでしょうか? ここで何が起こっているのでしょうか?

解決するには?

それが何なのか、少し説明します。 %2520 は.

共通スペース文字は、次のようにエンコードされます。 %20 というのは、ご指摘の通りです。 その % 文字は、次のようにエンコードされます。 %25 .

の取得の仕方 %2520 は、urlにすでに %20 を再び urlencode し、その際に %20 から %2520 .

文字を二重エンコードしていませんか?

編集してください。 これを少し拡大すると、特に ローカル のリンクがあります。リソースにリンクしたい場合を想定すると C:\my path\my file.html :

  • ローカルファイルのパスだけを指定した場合、ブラウザは指定されたすべての文字をエンコードして保護することが期待されます (上記の場合、図のようにスペースで指定する必要があります。 % は有効なファイル名文字であり、そのようにエンコードされます)。
  • という URL を指定した場合 file:// プロトコルは、基本的に、あらゆる予防措置を講じ、エンコードが必要なものはエンコードし、それ以外は特殊文字として扱うべきであると述べていることになります。上記の例では、次のように指定します。 file:///c:/my%20path/my%20file.html . スラッシュを修正する以外には、クライアントはここで文字をエンコードしてはいけません。

注意事項

  • スラッシュの方向 - 前方スラッシュ / はURLで使用され、逆スラッシュ \ がありますが、ほとんどのクライアントでは、適切なフォワードスラッシュに変換することで、どちらも使用することができます。
  • また、プロトコル名の後にスラッシュが3つありますが、これはリモートホストではなく現在のマシンを無言で参照しているためです (省略されていない完全なパスは次のようになります。 file://localhost/c:/my%20path/my%file.html しかし、ほとんどのクライアントは、ホスト部分(つまり2つのスラッシュのみ)がなくても、ローカルマシンを意味すると仮定して、3つ目のスラッシュを追加することで動作します。