symbole Pound ne pas afficher la page Web
-
23-10-2019 - |
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
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
£
Au lieu du symbole £, alternativly, où vous imprimez le signe £, faire:
<%=replace(stringWithPoundInIt,"£","£"%>
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);