2013-06-21 15 views
5

Mi sono imbattuto in un nuovo problema che non avevo mai visto prima: il mio cliente sta aggiungendo file a un progetto che abbiamo creato e alcuni dei nomi di file contengono caratteri speciali perché alcune delle parole sono spagnole .Caratteri non ascii nell'URL

Ad esempio un file che sto testando ha un valore. Sto chiamando quell'immagine in un file css come immagine di sfondo, ma in Safari non viene visualizzata. Ma lo fa su FF e Chrome.

Come test ho incollato il collegamento nel browser e la stessa cosa. Funziona su FF e Chrome ma Safari genera un errore. Quindi i personaggi della lingua lo stanno lanciando credo?

Firefox converte il seguente URL e modifica il valore da a% CC% 81 e carica l'immagine.

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

Si può vedere si rompe sopra ... ma FF e Chrome convertire tale a: http://www.themediacouncil.com/test/nonascii/LA-MAR_Cebiche-Cla%CC%81ssico_foto-Henrique-Peron-470x120-1371827671.jpg

è anche possibile vedere questo in azione qui: 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; }

Così che cosa è il modo giusto per gestire questa situazione. Sto sviluppando in PHP e WORDPRESS. Preferirei non dover dire al cliente di tornare indietro e sostituire tutti i file con caratteri speciali.

Qualsiasi aiuto è apprezzato. Grazie!

risposta

7

Strano che nessuno abbia risposto. Ora probabilmente è troppo tardi per te, ma comunque:

Credo che quello che sta diventando lo standard è convertire i caratteri non ASCII in sequenze di byte UTF-8 e includere quelle sequenze come codici esadecimali% HH nell'URL. Il carattere á è U + 00E1 (Unicode), che in UTF-8 rende i due byte 0xC3 0xA1. Quindi, Clássico diventerebbe Cl%C3%A1ssico.

La conversione segnalata da Firefox, Cla%CC%81ssico, ha fatto questo leggermente in modo diverso: ha cambiato il á in un seguito da U + 0301, il carattere ACCENTO ACCENTO COMBINANTE. In UTF-8, U + 0301 rende 0xCC 0x81.

Un altro, più vecchio, modo di gestire non-ASCII caratteri latini è quello di utilizzare un set di caratteri a 8 bit Latina, Rappresentazione (ISO-8859-1 o qualcosa di simile, come Windows-1252) e la codifica che, come un byte. Ciò renderebbe Clássico in Cl%E1ssico. Ma dal momento che questo funziona solo per i caratteri latini, ed è ambiguo per alcuni di loro, si spera e probabilmente scomparirà.

+0

suggerisci di dichiararlo nell'intestazione in modo che il browser converta i caratteri da solo o una specie di script? Ho la stessa impostazione dell'OP (Wordress) –

+1

Non posso dire di alcuna configurazione specifica, ma in generale suggerisco che URL: s sono codificati nel codice in cui appaiono (in html o qualsiasi altra cosa) usando la stessa convenzione che il web server lo fa. Se hai qualche influenza su quale convenzione usi il web server, ti suggerisco di usare sequenze di byte UTF-8 usando% HH. Dichiarandolo nell'intestazione? Non sono sicuro che avrebbe alcun effetto e probabilmente dipende dal browser. – njlarsson