Simbolo della libbra non visualizzazione su pagina web
-
23-10-2019 - |
Domanda
Ho una tabella di database mysql per il nome del negozio paese e simbolo di valuta - il set di caratteri è correttamente impostato su UTF8
.Questo è esempio dati inseriti nella tabella
insert into country ( country_name, currency_name, currency_code, currency_symbol) values ('UK','Pounds','GBP','£');
Quando guardo nel database - il simbolo cancelletto appare bene - ma quando ho recuperare dal database e lo mostro sul sito - uno strano spettacoli simbolo quadrato con un punto interrogativo all'interno al posto del simbolo cancelletto
Modifica In my.cnf - il set di caratteri è stato impostato per latin1 - ho cambiato in utf8 - poi mi sono collegati come root e corse \ s - è tornato
Server characterset: utf8 Client characterset: utf8
Regole di confronto
-- Database SELECT default_collation_name FROM information_schema.schemata WHERE schema_name = 'swipe_prod'; THIS DOES NOT RETURN ANYTHING -- Table SELECT table_collation FROM information_schema.tables WHERE TABLE_NAME = 'country'; THIS RETURNS utf8_general_ci -- Columns SELECT collation_name FROM information_schema.columns WHERE TABLE_NAME = 'country'; THIS RETURNS 7 ROWS but all have either null or utf8_general_ci
PHP codice
<?php $con = mysql_connect("localhost","user","123456"); mysql_select_db("swipe_db", $con); $result = mysql_query("SELECT * FROM country where country_name='UK'"); while($row = mysql_fetch_array($result)) { echo $row['country_name'] . " " . $row['currency_symbol']; } mysql_close($con); ?>
Si prega di consulenza Grazie
Soluzione
Quando si vede che "simbolo quadrato strano con un punto interrogativo all'interno" altrimenti noto come il SOSTITUZIONE CARATTERE , che di solito è un indicatore che si dispone di un byte nella gamma di 80-FF (128-255) e il sistema sta cercando di renderlo in UTF-8.
Questo intero intervallo di byte non è valido per caratteri a singolo byte in UTF-8, ma sono tutti molto comuni in codifiche occidentali come ISO-8859-1.
Quando osservo la tua pagina e passare manualmente la codifica dei caratteri da UTF-8 a ISO-8859-1 (in Firefox con View
>> >> Character Encoding
Western (ISO-8859-1)
), allora il cancelletto visualizza correttamente.
Quindi, cosa c'è che non va, allora? E 'difficile da dire - ci sono decine di luoghi in cui questo può essere sporcata in su. Ma molto probabilmente è a livello di database. Impostazione del CHARSET sul tavolo per UTF8 non è generalmente sufficiente. Tutti i vostri set di caratteri e regole di confronto devono essere in ordine prima che i personaggi si muoveranno intorno al sistema in modo corretto. Un errore comune non conforme set di caratteri di connessione , così ho 'd cominciare da lì.
Fammi sapere se hai bisogno di maggiori indicazioni.
Modifica
Per controllare ciò che i byte vengono effettivamente memorizzati per quel valore, eseguire questa query.
SELECT hex( currency_symbol )
FROM country
WHERE country_name = 'UK'
Se si vede A3
poi si sa il personaggio viene memorizzato come ISO-8859-1. Ciò significa che il problema si verifica durante o prima di scrivere al DB.
Se si vede C2A3
poi si sa il personaggio viene memorizzato come UTF-8. Ciò significa che il problema si verifica dopo la lettura dal DB e prima di scrivere al browser.
EDIT 2
-- Database
SELECT default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'your_db_name';
-- Table
SELECT table_collation
FROM information_schema.tables
WHERE TABLE_NAME = 'country';
-- Columns
SELECT collation_name
FROM information_schema.columns
WHERE TABLE_NAME = 'country';
Altri suggerimenti
Chipping nel mio 2 pence. Io uso utf8_encode () per l'output dei dati dal database. Questo sembra prendersi cura di altri personaggi come bene.
Prova a usare
£
Al posto del simbolo £, alternativly, dove si stampa il £ segno, fare:
<%=replace(stringWithPoundInIt,"£","£"%>
Ho avuto lo stesso problema. Quello che ho fatto è stato mi sono imbattuto questo diritto dopo la connessione al database (PHP):
mysql_query("SET NAMES utf8");
Spero che questo aiuti ..
Ho avuto lo stesso problema e ho risolto aggiungendo il sottostante codice PHP poco prima di eseguire la query SELECT sul database MySQL.
mysql_query("SET character_set_results=utf8", $link);
mi sono imbattuto in questo problema me stesso e risolto in fase di output utilizzando " mb_convert_encoding ".
Usando il tuo esempio ...
echo $row['country_name'] . " " . mb_convert_encoding($row['currency_symbol'], "UTF-8");
È possibile controllare qui .Sono non è sicuro se opere ma fare un tentativo, perché questo è strano non ho mai visto qualcosa di simile prima.