49 votes

Stockage et affichage d'une chaîne unicode () en utilisant PHP et MySQL

Je dois stocker du texte hindi dans une base de données MySQL, le récupérer à l'aide d'un script PHP et l'afficher sur une page web. J'ai fait ce qui suit :

J'ai créé une base de données et j'ai défini son encodage à UTF-8 et aussi la collation à utf8_bin . J'ai ajouté un champ varchar dans la table et je l'ai configuré pour accepter le texte UTF-8 dans la propriété charset.

Puis j'ai commencé à y ajouter des données. Ici, j'ai dû copier les données d'un site existant . Le texte en hindi 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 cela, le navigateur m'a montré " ??????".

Lorsque j'ai inséré l'équivalent UTF du texte en allant à "view source" dans le navigateur, cependant, se traduit par सूर्योदय .

Si je saisis et stocke सूर्योदय dans la base de données, il se convertit parfaitement.

Ce que je veux savoir, c'est comment je peux stocker directement dans ma base de données et le récupérer pour l'afficher dans ma page Web en utilisant PHP.

Aussi, quelqu'un peut-il m'aider à comprendre s'il y a un script qui, lorsque je le tape, me donne सूर्योदय ?

Solution trouvée

J'ai écrit l'exemple suivant script qui a fonctionné pour moi. J'espère que cela aidera quelqu'un d'autre

<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 les chaînes de caractères hindi utf est le suivant

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 la suivante : comment cela a-t-il fonctionné sans spécifier "META" ou des informations d'en-tête ?

Merci !

40voto

HappyApe Points 5392

Avez-vous défini le jeu de caractères approprié dans la section HTML Head ?

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

ou bien vous pouvez définir le type de contenu dans votre script php en utilisant -

   header( 'Content-Type: text/html; charset=utf-8' ); 

Il y a déjà quelques discussions ici sur StackOverflow - veuillez y jeter un coup d'œil.

Comment faire pour que MySQL gère correctement les UTF-8 paramétrage de l'utf8 avec mysql via php

PHP/MySQL avec des problèmes d'encodage

Donc ce que je veux savoir c'est comment je peux stocker directement dans ma base de données, les récupérer et les afficher dans dans ma page web en utilisant PHP.

Je ne suis pas sûr de ce que vous voulez dire par "stocker directement dans la base de données" avez-vous voulu dire entrer des données en utilisant PhpMyAdmin ou tout autre outil similaire ? Si oui, j'ai essayé d'utiliser PhpMyAdmin pour entrer des données unicode, donc cela a bien fonctionné pour moi - Vous pourriez essayer d'entrer des données en utilisant phpmyadmin et de les récupérer en utilisant un php script pour confirmer. Si vous devez soumettre des données via un Php script il suffit de définir les NAMES et CHARACTER SET lorsque vous créez la connexion mysql, avant d'exécuter les requêtes d'insertion, et lorsque vous sélectionnez les données. Jetez un coup d'oeil aux posts ci-dessus pour trouver la syntaxe. J'espère que cela vous aidera.

** UPDATE ** J'ai corrigé quelques fautes de frappe, etc.

0 votes

0 votes

Je ne suis pas sûr de cela quel était votre jeu de caractères plus tôt ?

0 votes

Il vaut mieux utiliser mysql_set_charset() au lieu de 'SET NAMES', sinon mysql_real_escape_string() n'est pas conscient du changement. php.net/mysql_set_charset

24voto

ROSE Points 134
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<?php 
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_query('SET character_set_results=utf8');
mysql_query('SET names=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_results=utf8');
mysql_query('SET collation_connection=utf8_general_ci');

mysql_select_db('onlinetest',$con);

$nith = "CREATE TABLE IF NOT EXISTS `TAMIL` (
  `data` varchar(1000) character set utf8 collate utf8_bin default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1";

if (!mysql_query($nith,$con))
{
  die('Error: ' . mysql_error());
}

$nithi = "INSERT INTO `TAMIL` VALUES ('  ')";

if (!mysql_query($nithi,$con))
{
  die('Error: ' . mysql_error());
}

$result = mysql_query("SET NAMES utf8");//the main trick
$cmd = "select * from TAMIL";
$result = mysql_query($cmd);
while($myrow = mysql_fetch_row($result))
{
    echo ($myrow[0]);
}
?>
</body>
</html>

2 votes

Exactement ce que je cherchais. Merci pour le code ! Je crois que juste mysql_query('SET character_set_results=utf8'); est suffisant pour afficher les caractères unicode ?

0 votes

Comment afficher la police kannada dans la console mysql ma requête "INSERT INTO lang values (' ')" ;

9voto

Sandeep Points 34

Pour ceux qui recherchent une déclaration PDO en PHP ( >5.3.5 ), nous pouvons définir le jeu de caractères comme indiqué ci-dessous :

$dbh = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');

2voto

Vinod Tiwari Points 21
CREATE DATABASE hindi_test
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
USE hindi_test;
CREATE TABLE `hindi` (`data` varchar(200) COLLATE utf8_unicode_ci NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `hindi` (`data`) VALUES('');

2voto

Aklesh Singh Points 49

Pour ceux qui rencontrent des difficultés, il suffit d'aller dans l'administration php et de changer la collation en utf8_general_ci Sélectionnez le tableau, puis allez dans Opérations>> Options du tableau>> Les collations devraient y figurer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X