Symbole livre à ne pas afficher sur la page web
J'ai une table mysql base de données pour stocker le nom du pays et le symbole de la monnaie - le jeu de caractères a correctement défini en UTF8.
C'est l'exemple de données insérées dans la table
insérer dans des pays ( country_name, currency_name, currency_code, symboles) valeurs ('Royaume-UNI','Livres','GBP','£');
Quand je me regarde dans la base de données - le symbole livre semble très bien - mais quand je l'ai récupérer à partir de la base de données et l'afficher sur le site web - un étrange symbole du carré s'affiche avec un point d'interrogation à l'intérieur de la place du symbole livre.
Modifier
Dans mon.cnf - le characterset a été mis à latin1 - je l'ai changé pour de l'utf-8 - puis je me suis Connecté en tant que root et a couru \s - il retourné
Serveur characterset: utf8 Client characterset: utf8
Classements
-- Base de données SÉLECTIONNEZ default_collation_name DE information_schema.schémas OÙ schema_name = 'swipe_prod'; CE NE RETOURNE RIEN -- Table SÉLECTIONNEZ table_collation DE information_schema.tables OÙ TABLE_NAME = 'pays'; CELA RENVOIE utf8_general_ci -- Colonnes SÉLECTIONNEZ collation_name DE information_schema.les colonnes OÙ TABLE_NAME = 'pays'; CECI RENVOIE à 7 LIGNES, mais tous ont la valeur null ou utf8_general_ci
CODE PHP
<?php $con = mysql_connect("localhost","utilisateur","123456"); mysql_select_db("swipe_db", $con); $result = mysql_query("SELECT * from pays où country_name='royaume-UNI'"); while($row = mysql_fetch_array($result)) { echo $row['country_name'] . "" . $row['symboles']; } mysql_close($con); ?>
S'il vous plaît conseils
Grâce
OriginalL'auteur Gublooo | 2010-06-02
Vous devez vous connecter pour publier un commentaire.
Quand vous voyez que "bizarre symbole carré avec un point d'interrogation à l'intérieur", autrement connu comme l' CARACTÈRE DE REMPLACEMENT, qui est généralement un indicateur que vous avez un octet dans la gamme de 80-FF (128 à 255) et le système est en train d'essayer de le rendre en UTF-8.
Que l'ensemble de la plage d'octets n'est pas valide pour des caractères à un octet en UTF-8, mais ils sont tous très commun dans l'ouest de l'encodage comme ISO-8859-1.
Quand j'ai vue votre page et de changer manuellement l'encodage de caractères UTF-8 en ISO-8859-1 (dans Firefox avec
View
>>Character Encoding
>>Western (ISO-8859-1)
) puis le SIGNE DIÈSE s'affiche correctement.Alors, quel est le problème alors? C'est dur à dire, il y a des dizaines d'endroits où cela peut être encrassées. Mais le plus probable, c'est au niveau base de données. Réglage du jeu de caractères sur la table pour de l'utf-8 n'est généralement pas suffisant. Tous vos jeux de caractères et les classements doivent être en ordre avant de caractères de déplacer le système correctement. Un piège classique est mal mis en connexion jeux de caractères, j'aimerais commencer par là.
Laissez-moi savoir si vous avez besoin de plus de conseils.
MODIFIER
Pour vérifier ce que les octets sont stockés, pour cette valeur, exécutez cette requête.
Si vous voyez
A3
alors vous savez le caractère est stocké comme ISO-8859-1. Cela signifie que le problème se produit avant ou pendant l'écriture dans la bd.Si vous voyez
C2A3
alors vous savez le caractère est stocké en tant que UTF-8. Cela signifie que le problème se produit après la lecture de la DB et avant d'écrire sur le navigateur.EDIT 2
Si vous allez l'itinéraire de HTML de codage d'entité - ne pas le faire d'un personnage à un moment - il suffit d'utiliser PHP htmlentities fonction.
echo htmlentities( $text );
. Mais j'ai fortement vous suggérons de fixer votre jeux de caractères à la placeFourni quelques informations de diagnostic pour vous.
Merci de me guider à travers cette Pierre - j'ai couru à la requête et à ce qu'il revienne C2A3 - j'ai aussi vérifié le characterset que j'ai édité dans ma question ci-dessus et semblent tous correctement mis en utf8
Essayez d'ajouter
mysql_set_charset( 'utf8', $con );
avant la requête select.OriginalL'auteur Peter Bailey
L'écaillage dans mes 2 centimes. J'utilise utf8_encode() de sortie les données de la base de données. Cela semble à prendre soin des autres personnages.
OriginalL'auteur Ben Harvey
Essayez d'utiliser
Au lieu du symbole£, alternativly, lorsque vous imprimez le £ signe, n':
Merci Tom, cette solution semble assez simple et résolu le problème en main. Mais je ne suis pas sûr que si nous avons de telles solutions de rechange pour les autres symboles comme le symbole de l'Euro, euros ou en monnaie cubaine ₱ ou de la monnaie Israélienne ₪
Une liste complète des entités: w3schools.com/tags/ref_entities.asp Mais Peter est à droite c'est un band aid solution, mais sur tous mes sites web maintenant, j'ai toujours utiliser les entités HTML pour les symboles des devises que ces pour une raison quelconque semblent vis plus souvent que les autres symboles, en particulier lorsque vous copiez et collez le code entre les différents éditeurs.
OriginalL'auteur Tom Gullen
J'ai eu le même problème. Ce que j'ai fait, j'ai couru ce droit après la connexion à la base de données (PHP):
Espère que cela aide..
OriginalL'auteur Krabats
J'ai eu le même problème et je l'ai résolu en ajoutant le ci-dessous de code PHP, juste avant l'exécution de la requête SELECT sur la base de données MySQL.
OriginalL'auteur ilight
Je suis tombé sur cette question de moi-même, et résolu à l'étage de sortie à l'aide de "mb_convert_encoding".
À l'aide de votre exemple...
echo $row['country_name'] . " " . mb_convert_encoding($row['currency_symbol'], "UTF-8");
OriginalL'auteur ballyhoos
Vous pouvez consulter ici.Je ne suis pas sûr si cela fonctionne, mais l'essayer, parce que c'est bizarre je n'ai jamais vu quelque chose comme ça avant.
OriginalL'auteur tazphoenix