web-dev-qa-db-ja.com

HTMLスペースは、%20ではなく%2520として表示されます

ファイル名をfirefoxブラウザーに渡すと、スペースが%2520ではなく%20に置き換えられます。

myhtml.htmlというファイルに次の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ファイルを変更するにはどうすればいいですか?ここで何が起こっていますか?

99
Eric Leschinski

%2520が何であるかについて少し説明します:

共通スペース文字は、ご自身で述べたように%20としてエンコードされます。 %文字は%25としてエンコードされます。

%2520を取得する方法は、URLに既に%20があり、再度urlencodeされ、%20%2520に変換する場合です。

あなた(または使用している可能性のあるフレームワーク)は、二重エンコード文字ですか?

編集:特に(LOCALリンクの場合)リソースC:\my path\my file.htmlにリンクする場合:

  • ローカルファイルパスのみを指定した場合、ブラウザは指定されたすべての文字をエンコードして保護することが期待されます(上記では、%は有効なファイル名文字なので、適切なURLに変換するとき(次のポイントを参照)。
  • file://プロトコルでURLを提供する場合、基本的にすべての予防措置を講じ、エンコードが必要なものをエンコードしたと述べているため、残りは特殊文字として扱う必要があります。したがって、上記の例では、file:///c:/my%20path/my%20file.htmlを指定する必要があります。スラッシュの修正は別として、クライアントはここで文字をエンコードしないでください。

ノート:

  • スラッシュの方向-スラッシュ/はURLで使用され、リバーススラッシュ\はWindowsパスで使用されますが、ほとんどのクライアントはこれらを適切なスラッシュに変換することで機能します。
  • さらに、プロトコル名の後に3つのスラッシュがあります。これは、リモートホストではなく現在のマシンを暗黙的に参照しているためです(省略されていない完全なパスはfile://localhost/c:/my%20path/my%file.htmlになります) (つまり、2つのスラッシュのみ)ローカルマシンを意味すると想定し、3番目のスラッシュを追加します。
199

一部の-おそらく有効-URLが2回エンコードされた理由。 %25は、urlencoded %記号です。したがって、元のURLは次のようになりました。

http://server.com/my path/

次に、一度にエンコードされました:

http://server.com/my%20path/

そして2回:

http://server.com/my%2520path/

したがって、urlencodingを実行する必要はありません-あなたの場合-他のコンポーネントは既にあなたに似ているようです。単にスペースを使用する

10
hek2mgl

Firefoxブラウザーを使用してローカルファイル名にアクセスしようとすると、file:\\\プロトコル( http://en.wikipedia.org/wiki/File_URI_scheme )を強制する必要があります。スペースを2回エンコードします。これからhtmlスニペットを変更します。

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

これに:

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

またはこれ:

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

次に、firefoxはこれがローカルファイル名であることを通知され、ブラウザーで画像を正しくレンダリングし、文字列を1回正しくエンコードします。

役立つリンク: http://support.mozilla.org/en-US/questions/900466

7
Eric Leschinski