127

ファイル名を Firefox ブラウザに渡すと、スペース%2520%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 ファイルを変更するにはどうすればよいですか? 何が起きてる?

4

6 に答える 6

255

それが何であるかについて少し説明し%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 番目のスラッシュを追加します。
于 2013-04-18T14:04:46.783 に答える
16

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

http://server.com/my path/

次に、一度urlencodeされました:

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

そして2回:

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

したがって、あなたの場合は、他のコンポーネントがすでにあなたのためにそうしているように見えるので、urlencodingを行うべきではありません。単にスペースを使用する

于 2013-04-18T14:04:24.743 に答える
7

Firefox ブラウザーを介してローカル ファイル名にアクセスしようとしている場合、file:\\\プロトコル ( http://en.wikipedia.org/wiki/File_URI_scheme ) を強制する必要があります。そうしないと、Firefox がスペースを 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 に通知され、ブラウザで画像が正しくレンダリングされ、文字列が一度正しくエンコードされます。

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

于 2013-04-18T14:01:45.560 に答える