如何摆脱json_encode():php中的UTF-8序列无效?

时间:2016-08-22 06:34:39

标签: php html mysql utf-8

我收到此警告,php返回null。

  

PHP警告:json_encode():参数中的UTF-8序列无效   第26行/var/www/rreadyreckoner/get_instruction.php   {"导致":[{"指令":空}]}

我正在尝试运行这个php脚本。

<?php 
include "demo_config.php";
$con = mysqli_connect($server_name,$mysql_user,$mysql_pass,$dbname);
 if(!$con)
 {
         echo "Connection Error".mysqli_connect_error();
 }
 else{
//echo "";
 }

$query ="SELECT instruction FROM `rreadyreckoner` ORDER BY id DESC LIMIT 1;";

$res = mysqli_query($con,$query);
$result = array();
while($row = mysqli_fetch_array($res))
{
                  array_push($result,
                  array('instruction'=>$row[0]));
}
if(!$result)
{
echo "Nothing to display";
}else
{
echo json_encode(array("result"=>$result));
}
mysqli_close($con);
?>

我做的唯一改变是在mysql数据库中插入内容时删除了一个默认插入的字符,并将其替换为空。

$instruction =$_POST["instruction"];
$plainHTML = str_replace(chr(194),"",$instruction);
$sql = "INSERT INTO rreadyreckoner (id, instruction)
VALUES (NULL, '$plainHTML')";

在此之前,我得到了适当的回应。 任何帮助或建议表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:1)

只需添加:

<LinearLayout
     android:id="@+id/camera_preview_holder"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
        <LinearLayout
            android:id="@+id/camera_preview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical" >
        </LinearLayout>
</LinearLayout>

mysqli_set_charset($con, "utf8"); 之后。

答案 1 :(得分:0)

$t = json_encode($s, JSON_UNESCAPED_UNICODE);

避免\u....内容。

请勿使用mb_encode

194是十六进制C2,这是utf8序列中常见的第一个字节。

有关需要完成的工作的更多讨论,请参阅Trouble with utf8 characters; what I see is not what I stored。特别是,检查SELECT HEX...技术以查看数据是否正确存储。

回到标题...你能提供你正在处理的无效序列吗?您可以执行echo bin2hex(...)之类的操作来获取顽皮字符串的十六进制。