Stocker et afficher la chaîne de caractères unicode (en anglais) en utilisant PHP et MySQL

je dois stocker du texte hindi dans une base de données MySQL, le récupérer en utilisant 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 défini son encodage à UTF-8 et aussi la collation à utf8_bin . J'ai ajouté un champ varchar dans la table et l'ai placé 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 des données à partir d'un site existant . Le le texte en hindi ressemble à ceci:"

j'ai directement copié ce texte dans ma base de données et j'ai 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é l'équivalent UTF du texte en allant sur" view source "dans le navigateur, cependant, सूर्योदय se traduit par सूर्योदय .

si j'entre et stocke सूर्योदय dans la base de données, il convertit parfaitement.

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

aussi, est-ce que quelqu'un peut m'aider à comprendre s'il y a un script qui me donne सूर्योदय quand je tape En "փ"?

Solution Trouvée

j'ai écrit l'exemple de script suivant qui a fonctionné 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 151980920"

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

Merci!

45
demandé sur Svante 2009-07-29 12:05:39

4 réponses

avez-vous mis le jeu de caractères approprié dans la section HTML Head?

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

ou 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à des discussions ici sur StackOverflow-s'il vous plaît jeter un oeil

Comment faire pour que MySQL gérer correctement l'UTF-8 paramétrage utf8 avec mysql à travers php

PHP / MySQL with problèmes d'encodage

Donc, ce que je veux savoir, c'est comment puis-je stocker directement les connaissances au sein de ma société la base de données, récupérez-la et affichez-la 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".. voulez-vous 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 ça a bien fonctionné pour moi - vous pouvez essayer entrer des données en utilisant phpmyadmin et les récupérer en utilisant un script php pour confirmer. Si vous avez besoin de soumettre des données via un script Php, définissez simplement les noms et les caractères lorsque vous créez la connexion mysql, avant d'exécuter les requêtes insert, et lorsque vous sélectionnez des données. Regardez les messages ci-dessus pour trouver la syntaxe. Espérons que cela aide.

* * mise à jour ** Juste corrigé quelques fautes de frappe, etc

36
répondu TigerTiger 2017-05-23 12:02:47
<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>
21
répondu ROSE 2009-08-27 04:09:38

pour ceux qui sont à la recherche de PHP (>5.3.5 ) AOP statement, nous pouvons définir charset comme ci-dessous:

$dbh = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
3
répondu Sandeep 2015-07-02 12:59:45
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('कंप्यूटर');
1
répondu Vinod Tiwari 2017-12-29 19:18:20