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 相关文章推荐
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
phpwind中的数据库操作类
Jan 02 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php实现图片添加水印功能
2014/02/13 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
js定时器实例分享
2016/12/20 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
建筑施工实习自我鉴定
2013/09/19 职场文书
学院领导推荐信
2013/10/30 职场文书
教师自荐信
2013/12/10 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
运动会开幕词
2015/01/28 职场文书
教师节校长致辞
2015/07/31 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书