json_encode有时无法正常工作

时间:2016-12-06 16:07:45

标签: php mysql json unicode encode

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();
  }

0 个答案:

没有答案