PHP版本: 5.6.28
我遇到了一个奇怪的问题,json_encode
每次都没有工作。我的意思是:
我有简单的connect.php文件:
$questions = $con->prepare("
SELECT Id, Question, Answer1, Answer2, Answer3
FROM Questions AS q
ORDER BY RAND()
LIMIT 1
");
$questions->execute();
$questions->bind_result($id, $question, $answer1, $answer2, $answer3);
$questions->store_result();
$questions->fetch();
$qa = array('0' => $id, '1' => $question, '2' => $answer1, '3' => $answer2, '4' => $answer3);
echo json_encode($qa);
这个PHP应该选择带有Id,question,answer1,answer2&的1个随机行。从数据库回答3,然后将其发送到Javascript。
当我大多数时候刷新页面时,我得到了空白页面(1/10它返回数据)。 SQL查询工作正常,在phpMyAdmin中测试时总是选择数据。
如果我使用var_dump
而不是echo json_encode
它总是按预期选择数据。所以似乎问题出在json_encode
。
数据库中的数据是UTF-8(包含ąčęėįšųūž
之类的字符)所以我也尝试了echo json_encode($qa, JSON_UNESCAPED_UNICODE);
而不是echo json_encode($qa);
,但同样的问题,没有任何改变。
我也试过使用以下功能,但结果相同:
function raw_json_encode($input, $flags = 0) {
$fails = implode('|', array_filter(array(
'\\\\',
$flags & JSON_HEX_TAG ? 'u003[CE]' : '',
$flags & JSON_HEX_AMP ? 'u0026' : '',
$flags & JSON_HEX_APOS ? 'u0027' : '',
$flags & JSON_HEX_QUOT ? 'u0022' : '',
)));
$pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/";
$callback = function ($m) {
return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8');
};
return preg_replace_callback($pattern, $callback, json_encode($input, $flags));
}
echo raw_json_encode($qa,JSON_UNESCAPED_UNICODE);
我也试过以下功能,但也没有成功:
function jsonRemoveUnicodeSequences($struct) {
return preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
}
echo jsonRemoveUnicodeSequences($qa);
您有任何想法如何解决它吗?
更新
当我使用var_dump
时,它返回:
array(4) { ["question"]=> string(32) "Kiek kainuoja �is k?no losjonas?" ["a1"]=> string(10) " 9,99 " ["a2"]=> string(9) " 4,65 " ["a3"]=> string(6) " 15,29" }
echo json_last_error();
返回:5
并且echo json_encode($qa);
不会返回任何内容。
当我通过浏览器检查DEV工具时,我看到消息:
HTML1300: Navigation occurred.
我不知道是否与我的问题有任何关系。
第一次进入网站时,我收到了以下警告:
DOM7011: The code on this page disabled back and forward caching. For more information, see: http://go.microsoft.com/fwlink/?LinkID=291337
刷新页面后,此警告消失。
更新2
header('Content-Type: text/html;charset=utf-8');
$con = mysqli_connect("localhost","xxxx","xxxx","xxxx");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}