为什么mysql中的空白/空格会破坏php中创建的json?

yc0p9oo0  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(333)

我有一个非常奇怪的问题,完全没有意义。
基本上我有一个mysql数据库(wordpress数据库),它保存wordpress post内容。
我需要使用这个数据库并创建一个json文件,我可以使用下面的代码轻松地做到这一点。
然而 post_content 数据库中的列包含一些奇怪的空白/空格,这些空格会导致我的json中断并显示 null .
破坏json代码的内容示例如下:

<p style="text-align: left;">Techno</p>
3.0 <a href="http://www.my-website.com/wp-content/uploads/2015/08/techno.doc">Techno</a>
3.2 <a href="http://www.my-website.com/wp-content/uploads/2015/08/techno.doc">Techno</a>

重要提示:请不要复制/粘贴上面的内容,如果你想测试它,因为出于某种原因stackoverflow修复了任何问题的内容。我上传了一个.txt文件到这里:https://ufile.io/hyecu
奇怪的是,我不知道为什么当我手动删除空白/空白空间,然后手动重新放置它们时,我的JSON工作得很好!!
这是创建json的php文件:

header('Content-type: application/json');

$sql="SELECT * FROM wp_posts WHERE post_status = 'inherit' AND post_title = '$get'";
//$query = mysqli_query ($db_conx, "SET NAMES 'utf8'");
$query = mysqli_query($db_conx, $sql);

$existCount = mysqli_num_rows($query);

$return_arr = array();

while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
    $row_array['ID'] = $row['ID'];
    $row_array['post_title'] = $row['post_title'];
    $row_array['post_content'] = $row['post_content'];
    array_push($return_arr,$row_array);
   }

echo json_encode($return_arr);

这是这一页的输出:

[{"ID":"31","post_title":"test","post_content":null}]

有人能就这个问题提出建议吗?
提前谢谢。

gj3fmq9x

gj3fmq9x1#

好吧,我试过这个代码,效果很好:

$row_array['post_content'] = mb_convert_encoding($row['post_content'], "UTF-8");

此代码将转换 post_contentUTF-8 .

ktca8awb

ktca8awb2#

所以,经过一点测试,我可以复制你的问题。试试这个:

$return_arr = array();
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
    $row_array['ID'] = 123456;
    $row_array['post_title'] = "Title";
    $row_array['post_content'] = htmlentities($row['post_content']);
    array_push($return_arr,$row_array);
}

现在,如果您不能使用结果,至少您知道其中实际包含哪些字符,您可以编写某种str\u replace()或regex来处理它。

相关问题