2015-09-18 15 views
5

Sto usando il seguente codice CSS per impostare il testo per un pulsante che rimuoverà un tag:Perché ottengo casualmente la stringa "Ã-" anziché "×" quando si imposta il pulsante: dopo {content}?

button.close:after { 
    content: '×'; 
} 

Questo si traduce in un pulsante bello come questo:

nice looking close button

Ma in modo casuale la stringa × viene sostituita dalla stringa Ã-. Per prima cosa ho pensato che questo potesse essere collegato alla codifica, ma se davvero fosse stato il problema, penso che questo non sarebbe accaduto casualmente. Succede a bassa frequenza e in questo momento non sta accadendo (aggiornerà la domanda con un'altra schermata di stampa non appena si ripresenta).

Questo codice css proviene da un file .less che sto compilando, quindi minifico e quindi concatenante.

Come posso essere sicuro che la stringa × venga visualizzata sempre?

+2

Che cosa significa "in modo casuale"? Dopo aver ricaricato? Dopo aver modificato il file? Sporadicamente mentre il sito è caricato, senza l'interazione dell'utente? In entrambi i casi, probabilmente * è * relativo alla codifica. –

+1

Prova ad aggiungere '@charset" utf-8 ";' nel tuo css –

+0

Sì, succede sporadicamente. Molto strano! Per esempio; Ho appena avuto questo problema, quindi ho ricompilato tutti i file CSS e ho colpito CMD + R su Chrome. Il problema non è andato via. Poi l'ho colpito più di 3 volte e ha funzionato di nuovo! Non mi ha annoiato molto da quando questo succede raramente. Il problema è che succede soprattutto quando sto dimostrando il software a qualcuno e questo è imbarazzante **. – renatoargh

risposta

0

Se vedete quei caratteri che probabilmente solo non ha specificato la codifica dei caratteri in modo corretto. Perché quei caratteri sono il risultato quando una stringa multi-byte UTF-8 viene interpretata con una codifica a singolo byte come ISO 8859-1 o Windows-1252.

Utilizzare utf8_decode() per convertirli in caratteri ISO-8859-1 normali. http://php.net/manual/en/function.utf8-decode.php

o aggiungere

<meta charset="UTF-8"> 

o utilizzare header("Content-Type: text/html; charset=utf-8"); in cima ai vostri script PHP.

5

Il multiplication character ha la sequenza UTF-8 0xC3 0x97. Quando viene decodificato utilizzando lo Windows-1252 character set invece diventa × (A tilde, em dash).

Quindi, il problema è in effetti che il CSS viene decodificato come Windows-1252 anziché come UTF-8. Il CSS viene normalmente decodificato allo stesso modo del documento HTML, quindi sembra che non ci sia alcuna specifica di set di caratteri più nella pagina né nell'intestazione HTTP. Ciò costringe il browser a indovinare quale sia la codifica. Poiché il browser sta facendo l'ipotesi usando tutti i dati disponibili (e l'algoritmo differisce tra i browser), l'ipotesi può essere diversa a seconda di quanta parte della pagina e dei file correlati sono già presenti nella cache.

Specificare la codifica per la pagina nella testa HTML:

<meta charset="utf-8"> 

È inoltre possibile specificare la codifica specifico per il file CSS aggiungendo questo al top, ma che dovrebbe essere necessario solo quando differisce da la codifica della pagina:

@charset "utf-8"; 
+0

grazie per la tua risposta. Ho appena notato che ho questo tag sul mio html ''. Non sono equivalenti? – renatoargh

+0

@renatoargh: dovrebbero essere. Potrebbe trovarsi nel posto sbagliato o essere sovrascritto da un tipo di contenuto dell'intestazione. Ci sono alcuni punti di vista che vale la pena guardare qui: http://stackoverflow.com/questions/4696499/meta-charset-utf-8-vs-meta-http-equiv-content-type – Guffa

Problemi correlati