【问题标题】:Storing and displaying unicode string (हिन्दी) using PHP and MySQL使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)
【发布时间】:2010-11-14 23:36:23
【问题描述】:

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

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

然后我开始向它添加数据。在这里,我不得不从existing site 复制数据。 印地语文本如下所示:सूर्योदय: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”或标题信息,它是如何工作的?

谢谢!

【问题讨论】:

    标签: php mysql unicode utf-8 internationalization


    【解决方案1】:

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

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

    或者您可以使用 -

    在 php 脚本中设置内容类型
       header( 'Content-Type: text/html; charset=utf-8' ); 
    

    这里已经有一些关于 StackOverflow 的讨论 - 请看一下

    How to make MySQL handle UTF-8 properly setting utf8 with mysql through php

    PHP/MySQL with encoding problems

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

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

    ** 更新 ** 只是修正了一些错别字等

    【讨论】:

    【解决方案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>
    

    【讨论】:

    • 正是我想要的。感谢您的代码!我相信 mysql_query('SET character_set_results=utf8'); 足以显示 unicode 字符?
    • 如何在 mysql 控制台中显示 kannada 字体我的查询“INSERT INTO lang values ('ಕನ್ನಡ ಸತ್ಯ ಕನ್ನಡ ನಿತ್ಯ')”;
    【解决方案3】:
    【解决方案4】:
    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('कंप्यूटर');
    

    【讨论】:

      【解决方案5】:

      对于那些遇到困难的人,只需进入 php admin 并将排序规则更改为 utf8_general_ci 选择表转到操作>>表选项>>排序规则应该在那里

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 2010-09-28
        • 2012-09-06
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多