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 相关文章推荐
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
php mysqli查询语句返回值类型实例分析
Jun 29 PHP
php中namespace及use用法分析
Dec 06 PHP
php 中phar包的使用教程详解
Oct 26 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP实现两种排课方式
Jun 26 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 随机生成10位字符代码
2009/03/26 PHP
培养自己的php编码规范
2015/09/28 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
jQuery MD5加密实现代码
2010/03/15 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python实现的简单文本类游戏实例
2015/04/28 Python
python对视频画框标记后保存的方法
2018/12/07 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
Exception类的常用方法
2012/06/16 面试题
毕业学生推荐信
2013/12/01 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
公司借款担保书
2015/09/22 职场文书
Python包argparse模块常用方法
2021/06/04 Python