当前位置:首页 > PHP > 正文内容

php json_encode 使用注意

高老师7年前 (2019-04-12)PHP1621

参数中包含gb2312的字符串,返回结果是false或者null(不同PHP版本具有差异性)

代码:

<?php
$dbms = 'mysql';
$host = '192.168.8.8';
$dbName = 'test';
$user = 'root';
$pass = 'root';
$dsn = "$dbms:host=$host;dbname=$dbName";
try
{
    //初始化PDO
    $dbh = new PDO($dsn, $user, $pass);
}
catch (PDOException $e)
{
    //获取异常字符串
    $message = $e->getMessage();

    //输出下异常字符串.正常输出(SQLSTATE[HY000] [2002] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)
    echo $message;

    //检查字符串的编码.输出EUC-CN.即GB2312
    echo mb_detect_encoding($message, ["ASCII", "GB2312", "GBK", "UTF-8"]) . PHP_EOL;

    //打印下Json类型竟然是false
    $data = json_encode([
        'message' => $message
    ]);
    var_dump($data);
}

上面的代码中由于数据库配置错误,一定会抛异常,异常信息是SQLSTATE[HY000] [2002] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

本身是想把错误通过json发送给前端,但是前端总是收不到任何内容,原来是因为pdo内部抛出的异常中携带gb2312编码的中文原因,输出前转换下编码即可

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/86.html

分享给朋友:

“php json_encode 使用注意” 的相关文章

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...

php异步信号处理

php异步信号处理

php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){  //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...

php定义常量数组

php定义常量数组

<?php //php7+ define('CONFIG', [     'MYSQL' => '127.0.0.1',     ...

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....

php迭代器返回值,php yield getReturn

php迭代器返回值,php yield getReturn

php生成器的方法getReturn获取生成器迭代完成后的返回值,当生成器迭代完成会将生成器的返回值返回,因此如果迭代器未进行迭代是获取不到值的,如果你没有return值则返回null,参考代码:<?php function G1() {    &nbs...

php生成器的send方法详解,php yield send

php生成器的send方法详解,php yield send

【一】.基本用法首先看看官方对send方法的解释:Sets the return value of the yield expression and resumes the generato...