Le stockage et l'affichage de chaîne unicode (हिन्दी) à l'aide de PHP et MySQL
J'ai pour stocker hindi texte dans une base de données MySQL, le récupérer à l'aide d'un script PHP et de l'afficher sur une page web. J'ai fait la suivante:
J'ai créé une base de données et l'ensemble de son encodage UTF-8 et aussi le classement utf8_bin
.
J'ai ajouté un champ de type varchar dans le tableau et le configurer pour accepter texte UTF-8 dans le jeu de caractères de la propriété.
Puis j'ai mis sur l'ajout de données. Ici, j'ai dû copier les données d'un site existant.
En hindi, le texte ressemble à ceci: सूर्योदय:05:30
J'ai directement copié ce texte dans ma base de données et utilisé le code PHP echo(utf8_encode($string))
pour afficher les données. En faisant ainsi, le navigateur m'a montré "??????".
Quand j'ai inséré le UTF équivalent du texte en cliquant sur "afficher la source" dans le navigateur, cependant, सूर्योदय se traduit par सूर्योदय
.
Si je entrer et stocker सूर्योदय
dans la base de données, il convertit parfaitement.
Donc ce que je veux savoir, c'est comment je peux stocker directement सूर्योदय dans ma base de données et de les récupérer et de les afficher dans ma page web à l'aide de PHP.
Aussi, quelqu'un peut-il m'aider à comprendre s'il y a un script qui lorsque je tape dans सूर्योदय, me donne सूर्योदय
?
Solution Trouvée
J'ai écrit l'exemple de script suivant qui a travaillé pour moi. Espérons que cela aide quelqu'un d'autre trop
<html>
<head>
<title>Hindi</title></head>
<body>
<?php
include("connection.php"); //simple connection setting
$result = mysql_query("SET NAMES utf8"); //the main trick
$cmd = "select * from hindi";
$result = mysql_query($cmd);
while ($myrow = mysql_fetch_row($result))
{
echo ($myrow[0]);
}
?>
</body>
</html>
Le dump de ma base de données stockant hindi utf chaînes est
CREATE TABLE `hindi` (
`data` varchar(1000) character set utf8 collate utf8_bin default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `hindi` VALUES ('सूर्योदय');
Maintenant, ma question est, comment ça fonctionne, sans spécifier "MÉTA" ou l'en-tête info?
Merci!
Vous devez vous connecter pour publier un commentaire.
Avez-vous mis bon jeu de caractères dans le code HTML de la section de la Tête?
ou vous pouvez définir un type de contenu dans votre script php à l'aide de -
Il y a déjà quelques discussions ici sur StackOverflow - s'il vous plaît jetez un oeil
Comment faire de MySQL gérer correctement l'UTF-8
réglage de l'utf8 avec mysql via php
PHP/MySQL avec des problèmes d'encodage
Je ne suis pas sûr de ce que tu veux dire par "stocker directement dans la base de données" .. vouliez-vous dire de la saisie de données à l'aide de PhpMyAdmin ou tout autre outil similaire? Si oui, j'ai essayé d'utiliser PhpMyAdmin pour l'entrée de données unicode, donc il a bien fonctionné pour moi " - Vous pouvez essayer d'entrer des données à l'aide de phpmyadmin et de le récupérer à l'aide d'un script php pour confirmer. Si vous devez transmettre des données via un script Php, il suffit de régler le NOMS et le JEU de CARACTÈRES lorsque vous créez de connexion mysql, avant d'exécuter des requêtes de type insert, et lorsque vous sélectionnez des données. Avoir un regard sur les postes ci-dessus pour trouver la syntaxe. Espérons que cela aide.
** Mise à JOUR **
Juste corrigé quelques fautes de frappe etc
mysql_query('SET character_set_results=utf8');
est assez pour l'affichage des caractères unicode?Pour ceux qui sont à la recherche pour PHP ( >5.3.5 ) AOP déclaration, nous pouvons mettre en jeu de caractères comme par ci-dessous: