This question already has answers here:
UTF-8 all the way through
(15个答案)
三年前关闭。
我有一个PHP脚本,它连接到数据库,并将下载的信息转换为JSON。
问题是,它正确地显示了像“é’!”这样的字符(é=\u00c9),但是对于字符“ő”,它只显示了一个“?”相反。
我试着切换MySQL数据库的字符集,但那没什么用。
下面是我使用的代码:
注意:我对rows数组使用iconv,因为JSON只接受UTF-8
编辑:我设法让它工作了。我的数据库现在使用“utf8mb4”字符集。我删除了将下载信息转换为UTF-8的部分代码,并将MySQL连接的字符集设置为“utf8mb4”。
这是我更新的代码:
(15个答案)
三年前关闭。
我有一个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); ?>
注意:我对rows数组使用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);
?>
最佳答案
是的,JSON只是utf-8。如果在数据库中更改了字符集,则值保持不变,因此无关紧要。
首先,尝试从另一个表中选择,但是使用新数据,转换为utf-8。
其次,尝试utf8解码($row[$key]);
关于php - PHP,JSON和MySQL中的特殊字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35959745/