Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP创建JSON提供错误数据?_Php_Mysql_Json_Encoding_Utf 8 - Fatal编程技术网

从PHP创建JSON提供错误数据?

从PHP创建JSON提供错误数据?,php,mysql,json,encoding,utf-8,Php,Mysql,Json,Encoding,Utf 8,我有一个php表单,用于将数据输入数据库phpMyAdmin,并使用SELECT查询显示数据库中的所有值,以便在php表单中查看 另外,我还有另一个PHP文件,用于从同一个db表创建JSON 在这里,当我输入诸如experienceța personală这样的外语时:保存在DB中的值是experienceÈa personalÄ402;:但当我使用select query以相同的php形式显示它时,它正确地显示experienceța personală:。所以db是正确的,现在我使用下面的p

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

另外,我还有另一个PHP文件,用于从同一个db表创建JSON

在这里,当我输入诸如experienceța personală这样的外语时:保存在DB中的值是experienceÈa personalÄ402;:但当我使用select query以相同的php形式显示它时,它正确地显示experienceța personală:。所以db是正确的,现在我使用下面的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);
?>
在这个\u00c8\u203aa中,这是错误的,它应该是\u021b t

所以pho习惯于创建JSON来解决这个问题


但我无法确切地找到为什么会这样。请提供帮助

根据数据库中MySql的版本,它可能没有使用完整的utf-8集,如下所述:

ucs2和utf8字符集不支持位于BMP之外的补充字符。BMP之外的字符比较为替换字符,并在转换为Unicode字符集时转换为“?”

然而,这不太可能与您的问题有关。我会尝试几种不同的方法,看看是否能解决你的问题

使用集合名称utf-8 你可以阅读更多关于这方面的内容 将数据插入数据库时使用utf8_编码,提取时使用utf8_解码。这样,您就不必担心MySql操纵unicode字符了。
避免使用Unicode-请注意额外的参数:

json_encode($s, JSON_UNESCAPED_UNICODE)
不要使用utf8编码/解码

莫吉巴克正在变成一个男人。这可能意味着

客户端中的字节以utf8格式正确编码。 默认情况下,您可能使用集合名latin1或SET_charset'latin1'或。它应该是utf8。 表中的列可能是字符集utf8,也可能不是字符集utf8,但它应该是字符集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,您有双重编码,这需要修复。

您确定数据库中的数据正确吗?在编码$taxi数组之前,尝试对其进行var_转储。是的,db是正确的,因为我在同一个php文件上尝试执行select查询时,我得到了正确的日期。好的,我会这样做,并让你知道数组4{[0]=>array5{[code]=>string3 CT1[name]=>string29 experienceÈÃÆ:一个个人的日期:[contact]=>string10 4535623643[url]=>string30图片/优惠/事件标识-8.jpg[详情]=>string66体验:个人体验:jerhbehwgrh 234234 hjfhjerg$%$%4}[1]=>array5{[代码]=>string4 ewrwvar dump就是这样的Dude我在直接从php查询select时已经说过我得到了相同的正确数据,唯一的问题是当我生成jsontry编码时,比如我建议编辑之后不要打印任何内容,我添加了这样的echo utf8_encode$taxi您想要单独编码每个字符串,而不是整个数组。
SELECT col, HEX(col) FROM tbl WHERE ...