gpt4 book ai didi

php - 从 PHP 创建的 JSON 提供了错误的数据?

转载 作者:行者123 更新时间:2023-11-28 23:50:13 28 4
gpt4 key购买 nike

我有一个 php 表单,用于将数据输入数据库 (phpmyadmin),我使用 SELECT 查询显示数据库中的所有值,以便以 php 表单查看。

我还有另一个 PHP 文件,我用它从同一个数据库表创建 JSON。

在这里,当我输入诸如“Experienşa personală:”之类的外语时,保存在数据库中的值是“ExperienÈ›a personală:”但是当我使用选择查询以相同的 php 形式显示它时,它会正确显示“Experienşa personală:” .所以数据库是正确的,现在我使用以下 php 代码来创建 JSON

    <?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "aaps";

// Create connection
$con=mysqli_connect($servername,$username,$password,$dbname);
// Check connection
mysqli_set_charset($con, 'utf8');
//echo "connected";
$rslt=mysqli_query($con,"SELECT * FROM offers");
while($row=mysqli_fetch_assoc($rslt))
{

$taxi[] = array('code'=> $row["code"], 'name'=> $row["name"],'contact'=> $row["contact"], 'url'=> $row["url"], 'details'=> $row["details"]);
}
header("Content-type: application/json; charset=utf-8");

echo json_encode($taxi);
?>

和 JSON 看起来像

[{"code":"CT1","name":"Experien\u00c8\u203aa personal\u00c4\u0192: ","contact":"4535623643","url":"images\/offers\/event-logo-8.jpg","details":"Experien\u00c8\u203aa personal\u00c4\u0192:  jerhbehwgrh  234234 hjfhjerg#$%$#%#4"},{"code":"ewrw","name":"Experien\u00c8\u203aa personal\u00c4\u0192: ","contact":"ewfew","url":"","details":"eExperien\u00c8\u203aa personal\u00c4\u0192: Experien\u00c8\u203aa personal\u00c4\u0192: Experien\u00c8\u203aa personal\u00c4\u0192: "},{"code":"Experien\u00c8\u203aa personal\u00c4\u0192: ","name":"Experien\u00c8\u203aa personal\u00c4\u0192: ","contact":"","url":"","details":"Experien\u00c8\u203aa personal\u00c4\u0192: "}]

在这个“\u00c8\u203aa”中这是错误的它应该是“\u021b”(t)。

So pho 曾经创建 JSON 来解决这个问题。

但我无法找到它为什么会这样。请帮忙

最佳答案

避免使用 Unicode——注意额外的参数:

json_encode($s, JSON_UNESCAPED_UNICODE)

不要使用 utf8_encode/decode。

ă 变成 ă 是 Mojibake。 可能意味着

  • 您在客户端中的字节已正确编码为 utf8(良好)。
  • 您可能默认使用 SET NAMES latin1(或 set_charset('latin1') 或 ...)连接。 (应该是 utf8。)
  • 表中的列可能是也可能不是CHARACTER SET utf8,但它应该是那样。

如果您需要修复数据,则需要“两步更改”,例如

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;

在进行任何更改之前,做

SELECT col, HEX(col) FROM tbl WHERE ...

这样,ă 应该显示 C483 的十六进制。如果您看到 C384C692,则您有“双重编码”,修复起来比较麻烦。

关于php - 从 PHP 创建的 JSON 提供了错误的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764347/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com