![](/img/trans.png)
[英]PHP json_encode(): why does encoded non-associative array return an empty string?
[英]Why does json_encode return empty?
我的脚本有问题,它通过 AJAX 从数据库请求记录,然后通过 JSON 返回。 它在我的本地主机上正常工作,但是当我将它上传到服务器时它不起作用。
我阅读了有关空json_encode()
结果的主题,发现很多人都有类似的问题,并且有数据编码的解决方案。 但是我的所有文件、表格和数据通常都以 UTF-8 编码在本地和远程服务器上。
我的 PHP 脚本所做的一切都是从数据库请求记录(我使用 PDO 库,并将数据库编码设置为 UTF-8 - SET NAMES 'utf8'
)然后抛出循环,它使用数据库中的数据生成 HTML 标签,然后作为数组返回使用json_encode($result)
。
如果我尝试print_r($result)
并在浏览器Developer tools
观看它们,我将看到带有正常数据的正确数组。 但是如果我用json_encode($result)
返回它们,结果将什么都不是。
我的结果数组中还有俄语文本。
结果数组示例:
[data] => Array
(
[0] => Array
(
[0] => <input type="checkbox" name="id[]" value="1">
[1] => 1
[2] => Английский стол
[3] => <span title='Вращающийся английский стол с выдвижными ящиками.Англия, 1900-е гг.Красное дерево, мягкая кожа диска, передвигается на бронзовых колесиках.Диаметр 91, высота 71 см.'>Вращающийся английский стол с выдвижными ящиками.<br>Англия, 1900-е гг.<br>Красное дерево, мягкая кожа диска, перед...</span>
[4] => 250€
[5] => sss
[6] =>
[7] => <span class="label label-sm label-success">Опубликован</span>
[8] => <a href="/jc_adm/?p=edit_product&id=1" class="btn btn-xs default btn-editable"><i class="fa fa-pencil"></i> Редактировать</a>
)
[1] => Array
(
[0] => <input type="checkbox" name="id[]" value="2">
[1] => 2
[2] => Старинный раскладной стол
[3] => <span title='Оригинальный стол 1800 г. вторая половина.Изогнутые ножки, резная опора, натуральное дерево.Высота 125 Ширина 56 Высота 78 см.'>Оригинальный стол 1800 г. вторая половина.<br>Изогнутые ножки, резная опора, натуральное дерево.<br>Высота 125 Ширин...</span>
[4] => 210€
[5] => sss
[6] =>
[7] => <span class="label label-sm label-success">Опубликован</span>
[8] => <a href="/jc_adm/?p=edit_product&id=2" class="btn btn-xs default btn-editable"><i class="fa fa-pencil"></i> Редактировать</a>
)
[2] => Array......
但是,如果我手动创建数组,例如下一个信息echo json_encode(array('fruits' => array('banan', 'apple', 'mango', 'редиска')));
.
它将正常工作,并将正常显示 JSON 编码的字符串。 但是我的示例数组不想返回。 为什么会这样?
我发现如果我删除设置数据库编码$objDB->query("SET NAMES utf8");
,我会得到结果,但我得到的不是俄文文本,而是问号?????
{"data":[["<input type=\"checkbox\" name=\"id[]\" value=\"1\">",1,"?????????? ????","<span title='??????????? ?????????? ???? ? ?????????? ???????.??????, 1900-? ??.??????? ??????...
您的 json_encode 似乎失败了,如果您在 PHP 配置中启用了它,您就会收到通知。 还有其他方法json_last_error
您的 json_encode 是否失败,请尝试获取json_last_error
的值
此错误消息可能有助于确定编码出了什么问题。
编辑
像这样的问题已经得到了回答:
试试这个,肯定有用
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
然后打电话
echo json_encode( utf8ize( $array ) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.