thinkphp的dump函数无输出实例代码


Posted in PHP onNovember 15, 2016

Thinkphp的dump函数

/**
 * 浏览器友好的变量输出
 * @param mixed $var 变量
 * @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
 * @param string $label 标签 默认为空
 * @param boolean $strict 是否严谨 默认为true
 * @return void|string
 */
function dump($var, $echo = true, $label = null, $strict = true)
{
  $label = (null === $label) ? '' : rtrim($label) . ' ';
  if (!$strict) {
    if (ini_get('html_errors')) {
      $output = print_r($var, true);
      $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
    } else {
      $output = $label . print_r($var, true);
    }
  } else {
    ob_start();
    var_dump($var);
    $output = ob_get_clean();
    if (!extension_loaded('xdebug')) {
      $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
      $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
    }
  }
  if ($echo) {
    echo ($output);
    return null;
  } else {
    return $output;
  }
}

测试代码

$a = '中文';
$a = iconv("UTF-8", "GB2312", $a);
dump($a);
echo "<hr />";
var_dump($a);

测试结果

thinkphp的dump函数无输出实例代码

发现仅仅var_dump有输出,而dump没有输出。

错误分析,定位htmlspecialchars

追踪调试函数,可以检测出问题出在htmlspecialchars这个函数上。

thinkphp的dump函数无输出实例代码

官网描述:5.4版本之前此函数的默认编码为ISO-8859-1,5.4和5.5版本默认编码为UTF-8,5.6之后则使用配置编码作为默认编码。 p>

这里PHP Version 5.6.21,那么htmlspecialchars使用的编码即为配置项的编码,如下:

thinkphp的dump函数无输出实例代码

htmlspecialchars使用UTF-8编码,对于gbk,gb2312等中文编码的字符串,则无输出。只要htmlspecialchars函数参数的字符串中包含一个gbk或者gb2312编码的字符,则无输出。测试如下:

$b = '中文abc';
$a = iconv("UTF-8", "GB2312", $b);
$c = $b.$a;
var_dump(htmlspecialchars($a, ENT_QUOTES)); // 无输出
var_dump(htmlspecialchars($b, ENT_QUOTES)); // 输出正常
var_dump(htmlspecialchars($c, ENT_QUOTES)); // 无输出

解决方案

$b = '中文abc';
$a = iconv("UTF-8", "GB2312", $b);
$c = $b.$a;
var_dump(htmlspecialchars($a, ENT_QUOTES, 'ISO-8859-1')); // 有输出,gb2312编码中文乱码
var_dump(htmlspecialchars($b, ENT_QUOTES, 'ISO-8859-1')); // 输出正常
var_dump(htmlspecialchars($c, ENT_QUOTES, 'ISO-8859-1')); // 有输出,gb2312编码中文乱码

所以将Thinkphp的dump函数中htmlspecialchars函数加上默认编码ISO-8859-1即可。

以上这篇thinkphp的dump函数无输出实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
隐性调用php程序的方法
Jun 13 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP实现登录验证码校验功能
May 17 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 #PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 #PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 #PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 #PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 #PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 #PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 #PHP
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
从0开始学Vue
2016/10/27 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
pandas.cut具体使用总结
2019/06/24 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
Python tkinter三种布局实例详解
2020/01/06 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
为什么需要版本控制
2016/10/28 面试题
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
公务员转正考察材料
2014/02/07 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers
vue router 动态路由清除方式
2022/05/25 Vue.js