代码之家  ›  专栏  ›  技术社区  ›  Anirudh Goel

使用php和mysql存储和显示unicode字符串

  •  46
  • Anirudh Goel  · 技术社区  · 15 年前

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

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

    然后我开始向它添加数据。在这里,我必须从 existing site . 印地语文本如下:____:05:30

    我直接将此文本复制到我的数据库中并使用了PHP代码 echo(utf8_encode($string)) 显示数据。浏览器向我展示了这一点????????”

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

    如果我进入并储存 स&2370;&2352;&2381;&2351;&2379;&2342;&2351; 在数据库中,它可以完美地转换。

    因此,我想知道的是如何直接将____存储到我的数据库中,并使用PHP将其获取并显示在我的网页中。

    还有,有没有人能帮我理解,当我输入____时,是否有一个脚本给了我 स&2370;&2352;&2381;&2351;&2379;&2342;&2351; ?

    找到解决方案

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

    <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”或头信息,它是如何工作的?

    谢谢!

    4 回复  |  直到 7 年前
        1
  •  37
  •   Community arnoo    7 年前

    在HTML头部部分设置了正确的字符集吗?

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

    或者可以使用-

       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连接、执行插入查询之前以及选择数据时设置名称和字符集。看看上面的文章,找出语法。希望有帮助。

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

        2
  •  22
  •   deceze    15 年前
    <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>
    
        3
  •  5
  •   Sandeep    9 年前

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

    $dbh = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
    
        4
  •  1
  •   Shafiqul Islam    7 年前
    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('कंप्यूटर');