使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)
Posted
技术标签:
【中文标题】使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)【英文标题】:Storing and displaying unicode string (हिन्दी) using PHP and MySQL 【发布时间】: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”或标题信息,它是如何工作的?
谢谢!
【问题讨论】:
【参考方案1】:您是否在 HTML Head 部分设置了正确的字符集?
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
或者您可以使用 -
在 php 脚本中设置内容类型 header( 'Content-Type: text/html; charset=utf-8' );
这里已经有一些关于 *** 的讨论 - 请看一下
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。查看上面的帖子以查找语法。希望对您有所帮助。
** 更新 ** 只是修正了一些错别字等
【讨论】:
另外:***.com/questions/1085093/… 我不确定.. 你之前的字符集是什么? 最好使用 mysql_set_charset() 而不是 'SET NAMES',否则 mysql_real_escape_string() 不知道这个变化。 php.net/mysql_set_charset【参考方案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 选择表转到操作>>表选项>>排序规则应该在那里
【讨论】:
以上是关于使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MySQL 数据库中存储和检索图像并使用 Php 将其显示在 html 中? [复制]
使用PHP和MySQL存储和显示unicode字符串(हिन्दी)