我有一个噩梦 JSON 编码来自 MSSQL 的数据库结果。它对所有内容进行编码,但任何带有字符的字段(例如项目符号)都会返回 NULL
我搜索了 SO 查看其他类似的问题和答案,但没有一个对我有用,所以我在这里发帖
我已经在我的本地机器 (Windows) 上进行了测试,它可以使用 PDO。我已经在未来的生产服务器 (Linux) 上对其进行了测试,但没有。两个php版本都是5.4.9
无法升级/更改生产服务器的任何内容。
这是有问题的代码
<?php
ini_set('mssql.charset', 'UTF-8');
$server = 'XXXXXXX';
// Connect to MSSQL
$link = mssql_connect($server, 'XXXXXXXX', 'XXXXXXXX');
if (!$link) {
die('Something went wrong while connecting to MSSQL');
}
mssql_select_db('XXXXXXX', $link);
$sql = "SELECT * FROM table WHERE view.[column] = 'XXXXXXX'";
$query = mssql_query($sql);
$rows = array();
while ($row = mssql_fetch_array($query, MSSQL_ASSOC)) {
$rows[] = $row;
}
// Clean up
mssql_free_result($query);
$json = array();
foreach($rows as $row) {
foreach($row as $key => $value) {
$json[$key] = trim($value);
}
}
var_dump($rows);
exit;
echo json_encode($json);
最佳答案
显然,数据库的输出不是 UTF-8 编码的。 According to the PHP docs , json_encode() 的所有输入都必须是 UTF-8。
例子:
$test = array('foo' => 'äöü', 'bar' => 'äöü');
$test['foo'] = mb_convert_encoding($test['foo'], 'ISO-8859-1', 'UTF-8');
echo json_encode($test);
结果:
{"foo":null,"bar":"\u00e4\u00f6\u00fc"}
解决方案:将您的数据库输出转换为 UTF-8。
关于php - json_encode 为以项目符号为字符的字段返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604165/