php - json_encode 为以项目符号为字符的字段返回 null

标签 php sql-server json linux

我有一个噩梦 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/

相关文章:

sql - 为什么我不能在 count(*) "column"中使用别名并在having 子句中引用它?

java - JSON 数组问题

java - 序列化为 Json 时避免 ConcurrentModificationException?

php - PHP中出现404错误后重定向到首页

PHPMYADMIN 导出截断 MYSQL 数据库的文本字段

php - 选择列文本包含数组值的行

php - Paypal Express Checkout API 付款后不收费

c# - winforms 连接到 SQL Server 的理想设计。

SQL查询问题

javascript - 传递给 SCEditor 时无法使 JSON 对象正常工作