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

È stato utile?

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

&pound;

Al posto del simbolo £, alternativly, dove si stampa il £ segno, fare:

<%=replace(stringWithPoundInIt,"£","&pound;"%>

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top