使用PHP和MySQL存储和显示unicode字符串(हिन्दी)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PHP和MySQL存储和显示unicode字符串(हिन्दी)相关的知识,希望对你有一定的参考价值。
我必须将hindi文本存储在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>
我的数据库存储hindi 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”或标题信息,它是如何工作的?
谢谢!
您是否在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,然后再执行插入查询,以及选择数据时。看看上面的帖子找到语法。希望能帮助到你。
**更新**刚修正了一些拼写错误等
<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语句的人,我们可以按照以下方式设置charset:
$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('कंप्यूटर');
以上是关于使用PHP和MySQL存储和显示unicode字符串(हिन्दी)的主要内容,如果未能解决你的问题,请参考以下文章
python - 使用 Django 将 Unicode 字符存储到 MySQL 时出现问题
使用JSON php脚本在Android应用程序的MySQL服务器中显示保存在varchar(utf8_unicode_ci)中的语言文本