我有一个PHP脚本,它连接到数据库,并将下载的信息转换为JSON。
问题是,它正确地显示了'é''á'''字符(é= \ u00c9),但是字符“ő”只显示'?'代替。 我尝试切换我的MySQL数据库的字符集,但这没有做任何事情。
以下是我正在使用的代码:
<?php
header('Content-Type: application/json; Charset=UTF-8');
$connection = mysqli_connect("localhost","root","","imreigye_wp") or die("Error " . mysqli_error($connection));
$sql = "select * from utca";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
$utcaarr = array(); while($row =mysqli_fetch_assoc($result))
{ foreach(array_keys($row) as $key){ $row[$key] = iconv("ISO-8859-2", "UTF-8", $row[$key]); }
$utcaarr[] = $row;
}
echo json_encode($utcaarr);
mysqli_close($connection); ?>
注意:我对行数组使用iconv,因为JSON只接受UTF-8
编辑:我设法让它运转起来。我的数据库现在使用“utf8mb4”字符集。我删除了将下载的信息转换为UTF-8的代码部分,并将MySQL连接的字符集设置为“utf8mb4”。
这是我更新的代码:
<?php
header('Content-Type: application/json; Charset=UTF-8');
$connection = mysqli_connect("localhost","root","","imreigye_wp") or die("Error " . mysqli_error($connection));
mysqli_set_charset($connection, 'utf8mb4');
$sql = "select * from utca";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
$utcaarr = array();
while($row =mysqli_fetch_assoc($result))
{
$utcaarr[] = $row;
}
echo json_encode($utcaarr);
mysqli_close($connection);
?>
答案 0 :(得分:0)
是的,JSON只是utf-8。如果您更改了数据库中的字符集,则值保持不变,因此无关紧要。
首先,尝试从另一个表中选择,但是使用新数据,转换为utf-8。
其次,尝试utf8_decode($ row [$ key]);
答案 1 :(得分:0)
如果您计划通过JSON传输它们,则需要对它们进行编码。
$array = array('nome'=>'Paição','cidade'=>'São Paulo');
$array = array_map('htmlentities',$array);
//encode
$json = html_entity_decode(json_encode($array));
//Output: {"nome":"Paição","cidade":"São Paulo"}
echo $json;
答案 2 :(得分:0)
UTF-8 all the way trough完成这项工作!您需要为数据库设置utf8mb4字符集,并为您的连接设置相同的字符串。