我有一个梦魇JSON编码来自MSSQL的数据库结果。它对所有字符进行编码,但任何带有诸如项目符号等字符的字段都会返回NULL
我已经搜索了其他类似的问题和答案,但没有一个对我有效,所以我在这里发帖
我已经在我的本地计算机(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);
答案 0 :(得分:1)
显然,DB的输出不是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。