8

これまでに見たことのない新しい問題に遭遇しました。クライアントがビルドしたプロジェクトにファイルを追加しているのですが、一部の単語がスペイン語であるため、一部のファイル名に特殊文字が含まれています。

たとえば、私がテストしているファイルには á が含まれています。cssファイルでその画像を背景画像として呼び出していますが、Safariでは表示されません。しかし、FFとChromeではそうです。

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

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

http://www.themediacouncil.com/test/nonascii/LA-MAR_Cebiche -Clássico_foto-Henrique-Peron-470x120-1371827671.jpg

上記で壊れていることがわかります...しかし、FFとChromeはそれを次のように変換し ます:

また、ここで実際にこれを見ることができます: 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で開発しています。クライアントに戻ってすべてのファイルを特殊文字に置き換えるように指示する必要はありません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

10

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

あなたが Firefox から報告した変換Cla%CC%81ssicoでは、これが少し異なっていました。それは á を a に変更し、その後に U+0301、COMBINING ACUTE ACCENT 文字が続きました。UTF-8 では、U+0301 になり0xCC 0x81ます。

Unicode の「á」または「a の後にアクセントを組み合わせる」のどちらの表現を選択するかは、Web サーバーが正しいものを照合するために何を必要とするかによって異なります。あなたの場合、ファイル名には実際に結合文字のアクセントが含まれている可能性があり、それが機能した理由です(わかりにくい)。

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

于 2014-01-17T12:33:30.640 に答える