使用PHP和MySQL存储和显示unicode字符串(ह;ि;न;्;द;ी;)

使用PHP和MySQL存储和显示unicode字符串(ह;ि;न;्;द;ी;),php,mysql,unicode,utf-8,internationalization,Php,Mysql,Unicode,Utf 8,Internationalization,我必须将印地语文本存储在MySQL数据库中,使用PHP脚本获取它并将其显示在网页上。我做了以下工作: 我创建了一个数据库,将其编码设置为UTF-8,并将排序规则设置为utf8\u bin。 我在表中添加了一个varchar字段,并将其设置为在charset属性中接受UTF-8文本 然后我开始向它添加数据。在这里,我必须从一个数据库中复制数据。 印地语文本如下所示:सूर्योदय:05:30 我直接将此文本复制到数据库中,并使用PHP代码echo(utf8\u encode($string))显

我必须将印地语文本存储在MySQL数据库中,使用PHP脚本获取它并将其显示在网页上。我做了以下工作:

我创建了一个数据库,将其编码设置为UTF-8,并将排序规则设置为
utf8\u bin
。 我在表中添加了一个varchar字段,并将其设置为在charset属性中接受UTF-8文本

然后我开始向它添加数据。在这里,我必须从一个数据库中复制数据。 印地语文本如下所示:सूर्योदय:05:30

我直接将此文本复制到数据库中,并使用PHP代码
echo(utf8\u encode($string))
显示数据。这样做的时候,浏览器向我显示了“?????”

然而,当我通过在浏览器中的“查看源代码”插入文本的UTF等价物时,सूर्योदय 翻译成
和#2360ूर्योदय

如果我输入并存储
सूर्योदय
所以我想知道的是如何直接存储सूर्योदय 进入我的数据库并获取它,然后使用PHP将其显示在我的网页中

还有,有谁能帮我理解,当我输入时,是否有一个脚本सूर्योदय, 给我
和#2360ूर्योदय

找到解决方案

我编写了下面的示例脚本,它对我很有用。希望它也能帮助别人

<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>
现在我的问题是,在没有指定“META”或标题信息的情况下,它是如何工作的


谢谢

您是否在HTML标题部分设置了正确的字符集

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
这里已经有一些关于StackOverflow的讨论-请看一看

所以我想知道的是我怎么能 直接存储सूर्योदय 进入我的 数据库并获取它并显示在 我的网页使用PHP

我不知道你所说的“直接存储在数据库中”是什么意思。。您的意思是使用PhpMyAdmin或任何其他类似工具输入数据吗?如果是,我已经尝试使用PhpMyAdmin输入unicode数据,因此对我来说效果很好-您可以尝试使用PhpMyAdmin输入数据,并使用php脚本检索数据以进行确认。如果需要通过Php脚本提交数据,只需在创建mysql连接时、执行insert查询之前以及选择数据时设置名称和字符集。看看上面的文章,找出语法。希望能有帮助

**更新** 刚刚修复了一些打字错误等


<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>

对于那些正在寻找PHP(>5.3.5)PDO语句的人,我们可以按照以下方式设置字符集:

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

对于那些面临困难的人,只需访问php管理员并将排序规则更改为utf8\u general\u ci
选择表格转到操作>>表格选项>>排序规则应该在那里

另外:我不确定。。您之前的字符集是什么?最好使用mysql\u set\u charset()而不是“set NAMES”,否则mysql\u real\u escape\u string()不会注意到更改。正是我想要的。谢谢你的代码!我相信只是
mysql\u查询('SET character\u SET\u results=utf8')
是否足以显示unicode字符?如何在mysql控制台中显示kannada字体我的查询“插入语言值('ಕನ್ನಡ ಸತ್ಯ ಕನ್ನಡ ನಿತ್ಯ')";这对我很有用,也别忘了在你的头部添加一个部分
<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>
$dbh = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
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('कंप्यूटर');