2013-06-21 19 views
5

私は今までに見たことのない新しい問題に遭遇しました。クライアントが作成したプロジェクトにファイルを追加していて、ファイル名の中にはスペルがあります。URLの非ASCII文字

たとえば、私がテストしているファイルには、áが入っています。その画像をCSSファイルで背景画像として呼び出していますが、Safariでは表示されません。しかし、それはFFとクロームの上で行います。

テストとして、ブラウザと同じものにリンクを貼り付けました。 FFとChromeで動作しますが、Safariでエラーが発生します。だから、言語のキャラクターはそれを投げていると思いますか?

Firefoxは次のURLを変換し、「%CC%81」に変更して画像を読み込みます。

あなたはそれが上記壊れる見ることができます

http://www.themediacouncil.com/test/nonascii/LA-MAR_Cebiche-Clássico_foto-エンリケ・ペロン-470x120-1371827671.jpg

...しかし、FFとChromeはにすることを変換します。 http://www.themediacouncil.com/test/nonascii/LA-MAR_Cebiche-Cla%CC%81ssico_foto-Henrique-Peron-470x120-1371827671.jpg

ます。また、この中に見ることができますここでのアクションは:http://jsfiddle.net/Md4gZ/2/

.testbox { width:340px; height:100px; background:url('http://www.themediacouncil.com/test/nonascii/LA-MAR_Cebiche-Clássico_foto-Henrique-Peron-470x120-1371827671.jpg') no-repeat top left; }

正しい方法は、これを処理するので、いただきました。私はPHPとWORDPRESSで開発しています。むしろ、クライアントに戻ってすべてのファイルを特殊文字で置き換えるように伝える必要はありません。

何か助けていただければ幸いです。ありがとう!

答えて

7

奇妙なことに誰も答えませんでした。

非ASCII文字をUTF-8バイトシーケンスに変換し、そのシーケンスを%HH 16進コードとしてURLに含めることが標準となっていると思います。文字はU + 00E1(Unicode)で、UTF-8では2バイトを0xC3 0xA1にします。したがって、ClássicoCl%C3%A1ssicoになります。

あなたがFirefoxから報告した変換Cla%CC%81ssicoは、これを少し違った形で表しています。「a」を「a」に変更し、「U + 0301」、「ACBEING ACUTE ACCENT」の文字を変更しました。 UTF-8では、U + 0301は0xCC 0x81となります。

ASCII以外のラテン文字を処理するもう一つの古い方法は、8ビットのラテン文字セット(ISO-8859-1またはWindows-1252などの同様のもの)を使用して1バイトとしてエンコードすることです。それはClássicoCl%E1ssicoにするでしょう。しかし、これはラテン文字にしか機能せず、一部の人にとってあいまいであるため、うまくいっておそらく消えています。

+0

あなたはそれをヘッダーで宣言して、ブラウザーが自分自身の文字やある種のスクリプトを変換することをお勧めしますか?私はOP(Wordress)と同じ設定をしています –

+1

具体的な設定については言いませんが、一般的には、URLは:(htmlなどで) Webサーバーが行います。 Webサーバがどのような規約を使用しているかに影響がある場合は、%HHを使用するUTF-8バイトシーケンスを使用することをお勧めします。それをヘッダーで宣言しますか?それが何らかの影響を及ぼしているかどうか、おそらくブラウザーに依存しているかはわかりませ – njlarsson

関連する問題