php解决DOM乱码的方法示例代码


Posted in PHP onNovember 20, 2016

前言

DOM是php比较新的xml和html处理类,可以像javascript那样方便的操作DOM树,网上更多的是介绍它处理XML的情况,今天这篇文章就介绍下php解决DOM乱码的方法,下面话不多说,直接看下面的解决方法。

解决方法如下

/**
 * 请求url页面信息
 * @param str $url
 * @return str mixed|boolean
 */
function curl_get($url) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  //302跳转
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0');
  curl_setopt($curl, CURLOPT_REFERER, $url);
  $data = curl_exec($curl);
  $code = curl_getinfo($curl,CURLINFO_HTTP_CODE); //输出请求状态码
  curl_close($curl);
  if(200 == $code) {
    //解决乱码
    if (preg_match('#<meta[^>]*charset="?gb2312"[^>]*>#', $data)) {
      $data = iconv("gb2312","utf-8//IGNORE",$data);
      $data = preg_replace('#<meta[^>]*charset="?gb2312"[^>]*>#is', '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">', $data);
    }

    if (!preg_match('#<meta charset="utf-8"[^>]*>#is', $data)) {
      $data = str_replace('<head>', '<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">', $data);
    }

    if (preg_match('#<meta charset="utf-8"[^>]*>#is', $data)) {
      $data = preg_replace('#<meta charset="utf-8"[^>]*>#is', '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">', $data);
    }

    return $data;
  } else {
    return false;
  }

}
/**
 * 获取 DOMDocument 对象
 * @param str $url
 * @return boolean|DOM
 */
function getDom($url) {
  $html_content = curl_get($url);
  if(empty($html_content)) {
    //saveLog($url, '请求失败');
    return false;
  }
  $dom = new DOMDocument('1.0', 'utf-8');
  libxml_use_internal_errors(true);
  $dom->loadHTML($html_content);
  return $dom;
}
$html_content = mb_convert_encoding($html_content, 'UTF-8', 'gb2312');

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
php下封装较好的数字分页方法
Nov 23 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
php 地区分类排序算法
Jul 01 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
Aug 20 PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 PHP
PHP微信分享开发详解
Jan 14 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
使用Yii2实现主从数据库设置
Nov 20 #PHP
php 二维数组时间排序实现代码
Nov 19 #PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 #PHP
php socket通信简单实现
Nov 18 #PHP
php微信开发之自定义菜单实现
Nov 18 #PHP
php微信开发之百度天气预报
Nov 18 #PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 #PHP
You might like
php include,include_once,require,require_once
2008/09/05 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
PHP加密解密函数详解
2015/10/28 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
event.srcElement 用法笔记e.target
2009/12/18 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
详解Python3.1版本带来的核心变化
2015/04/07 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Python 切分数组实例解析
2019/11/07 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
Python接口测试文件上传实例解析
2020/05/22 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
职业生涯规划设计步骤
2014/01/12 职场文书
好家长事迹材料
2014/01/23 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
产品销售计划书
2014/05/04 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
基层党支部承诺书
2015/04/30 职场文书
单独二胎证明
2015/06/24 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP