【问题标题】:How to get rid of json_encode(): Invalid UTF-8 sequence in php?如何摆脱 json_encode(): php 中无效的 UTF-8 序列?
【发布时间】:2016-08-22 06:34:38
【问题描述】:

我收到此警告并且 php 返回 null 。

PHP 警告: json_encode(): Invalid UTF-8 sequence in argument in /var/www/rreadyreckoner/get_instruction.php 第 26 行 {“结果”:[{“指令”:null}]}

我正在尝试运行这个 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')";

在这样做之前,我得到了正确的回应。 任何帮助或建议表示赞赏。谢谢。

【问题讨论】:

    标签: php html mysql utf-8


    【解决方案1】:

    只需添加:

    mysqli_set_charset($con, "utf8");
    

    mysql connect之后。

    【讨论】:

    • 这增加了 {"result":[{"instruction":"\n\n\u00a0 \u00a0<\/head>\n\n\u00a0 \u00a0\n\n \u00a0 \u00a0 \u00a0 和 \n 字符我怎样才能摆脱它们。
    • 你看到 Stack Overflow 的回答了吗stackoverflow.com/a/30363698/3081659
    【解决方案2】:
    $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(...) 之类的操作来获取顽皮字符串的十六进制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      相关资源
      最近更新 更多