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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
php去掉文件前几行的方法
Jul 29 PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
Zend Framework教程之配置文件application.ini解析
Mar 10 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 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实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
angular2使用简单介绍
2016/03/01 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
Python os模块学习笔记
2015/06/21 Python
Python ldap实现登录实例代码
2016/09/30 Python
python使用mysql数据库示例代码
2017/05/21 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Django开发的简易留言板案例详解
2018/12/04 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
Python表达式的优先级详解
2020/02/18 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
学年末自我鉴定
2014/01/21 职场文书
最美护士演讲稿
2014/08/27 职场文书
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS