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

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

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

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

我直接将此文本复制到我的数据库中,并使用PHP代码来显示数据。这样做后,浏览器显示我“??????”。echo(utf8_encode($string))

但是,当我在浏览器中转到“查看源代码”来插入文本的UTF等效物时,सूर्योदय转换为.सूर्योदय

如果我输入并存储在数据库中,它完全转换。सूर्योदय

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

另外,任何人都可以帮助我理解是否有脚本,当我输入सूर्योदय时,会给我?सूर्योदय

找到的解决方案

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

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

存储印地语 utf 字符串的数据库的转储是

CREATE TABLE `hindi` (
  `data` varchar(1000) character set utf8 collate utf8_bin default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `hindi` VALUES ('सूर्योदय');

现在我的问题是,它如何在不指定“META”或标题信息的情况下工作?

谢谢!


答案 1

您是否在 HTML Head 部分中设置了正确的字符集?

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

或者您可以使用以下方法在php脚本中设置内容类型 -

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

StackOverflow上已经有一些讨论 - 请看一下

如何使MySQL处理UTF-8通过php正确设置utf8与mysql

具有编码问题的 PHP/MySQL

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

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

**更新**刚刚修复了一些拼写错误等


答案 2
<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>

推荐