使用php从数据库获取“hindi”结果时获取错误

时间:2015-12-09 06:43:07

标签: php mysql utf-8

我正在尝试使用php从MySQL数据库中获取“hindi”(utf-8)结果。

我写了以下代码..

<?php
$connection = mysql_connect("localhost","root","root");
if(!connection)
{
die('Could not connect: ' . mysql_error());
}

mysql_query('SET character_set_results=utf8');
mysql_query('SET name=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('data',$connection);
$result = mysql_query("SET NAMES utf8");
$cmd = "select * from question";
$result = mysql_query($cmd);

$myArray = array();

while($row =$result->fetch_object()){
$tempArray = $row;
array_push($myArray, $tempArray);
}
echo json_encode($myArray);
?>

但我没有得到预期的结果。我想打印Utf-8(印地语)数据。

如果我使用以下代码打印单个行,那么

while($myrow = mysql_fetch_row($result)){
echo ($myrow[0]);
echo ($myrow[1]);
echo ($myrow[2]);
}

工作正常并打印utf-8(印地语)数据。

请帮助我,我错过了什么或实施了什么错误....

提前致谢.. !!

1 个答案:

答案 0 :(得分:0)

  

mysql_query('SET name = utf8');

应为mysql_query('SET NAMES utf8');。其他SET不是必需的。

另外,不要使用弃用的mysql_ *接口,重写使用mysqli_ *(或PDO)。

印地语,你的意思是DEVANAGARI,例如हिन्दी
utf8十六进制为:E0A4B9 E0A4BF E0A4A8 E0A58D E0A4A6 E0A580
如果您看到类似हिनà¥à¤¦à¥€的内容,则会有“Mojibake”。

  

没有得到预期的结果

你得到了什么?

json_encode - 应该包含JSON_UNESCAPED_UNICODE的第二个参数,以避免获取“html实体”。

要在PHP中查看十六进制,

$hex = unpack('H*', $text);
echo implode('', $hex);

latin1是不够的;您需要utf8(或utf8mb4)。

我意识到这不是一个完整或连贯的答案,但它为OP提供了几个行动项目,以便更接近解决方案。