Question

J'ai une table de base de données MySQL au nom du pays du magasin et symbole monétaire - le jeu de caractères est fixé correctement UTF8

.

Ceci est par exemple des données insérées dans la table

insert into country ( country_name, currency_name, currency_code, currency_symbol) values 
('UK','Pounds','GBP','£');

Quand je regarde dans la base de données - le symbole dièse apparaît bien - mais quand je le récupérer à partir de la base de données et l'afficher sur le site - un carré bizarre apparaît avec un point d'interrogation à l'intérieur au lieu du symbole dièse

Modifier Dans my.cnf - l'characterset a été mis à latin1 - je l'ai changé en UTF8 - alors je me suis connecté en tant que root et RAN \ s - il est revenu

Server characterset:    utf8
Client characterset:    utf8

Les classements

-- 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

CODE PHP

<?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);
?>

conseils S'il vous plaît Merci

Était-ce utile?

La solution

Quand vous voyez que « symbole carré bizarre avec une marque question à l'intérieur » autrement connu sous le nom REMPLACEMENT dE CARACTÈRE , qui est généralement un indicateur que vous avez un octet dans la plage de 80 FF (128-255) et le système tente de le rendre en UTF-8.

Cette toute-plage d'octets est invalide pour les caractères d'un octet en UTF-8, mais sont très communs dans les codages occidentaux tels que ISO-8859-1.

Quand je regarde votre page et passer manuellement le codage de caractères UTF-8 à ISO-8859-1 (dans Firefox avec View >> Character Encoding >> Western (ISO-8859-1)), le POUND SIGN s affiche correctement.

Alors, quel est le problème alors? Il est difficile de dire - il y a des dizaines d'endroits où cela peut être encrassées. Mais le plus probable il est au niveau de la base de données. Réglage de la CHARSET sur la table pour UTF8 est généralement pas suffisant. Tous vos jeux de caractères et être besoin collations pour avant les personnages se déplaceront le système correctement. Un écueil courant est mal défini de connexion charsets, je « d commencer par là.

Laissez-moi savoir si vous avez besoin de plus d'orientation.

EDIT

Pour vérifier les octets sont stockés pour cette valeur, exécutez cette requête.

SELECT hex( currency_symbol )
  FROM country
 WHERE country_name = 'UK'

Si vous voyez A3 alors vous connaissez le caractère est stocké comme ISO-8859-1. Cela signifie que le problème se produit pendant ou avant d'écrire à la DB.

Si vous voyez C2A3 alors vous connaissez le caractère est stocké en UTF-8. Cela signifie que le problème se produit après avoir lu de la DB et avant d'écrire sur le navigateur.

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';

Autres conseils

Chipping dans mon 2 pence. J'utilise utf8_encode () pour délivrer en sortie les données de la base de données. Cela semble prendre soin des autres personnages aussi bien.

Essayez d'utiliser

&pound;

Au lieu du symbole £, alternativly, où vous imprimez le signe £, faire:

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

J'ai eu le même problème. Ce que je n'étais-je couru ce droit après la connexion à la base de données (PHP):

mysql_query("SET NAMES utf8");

Hope this helps ..

J'ai eu le même problème et je l'ai résolu en ajoutant le code de PHP ci-dessous juste avant d'exécuter la requête SELECT sur la base de données MySQL.

mysql_query("SET character_set_results=utf8", $link);

je suis tombé sur cette question moi-même et résolu à l'étape de sortie en utilisant « mb_convert_encoding ».

En utilisant votre exemple ...

echo $row['country_name'] . " " . mb_convert_encoding($row['currency_symbol'], "UTF-8");

Vous pouvez consulter .Je ne sais pas si œuvres mais lui donner un essai parce que c'est bizarre que je ne l'ai jamais vu quelque chose comme ça avant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top