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 前一天或后一天的日期
Jun 28 PHP
PHP 远程关机实现代码
Nov 10 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
php权重计算方法代码分享
Jan 09 PHP
php生成RSS订阅的方法
Feb 13 PHP
php中请求url的五种方法总结
Jul 13 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
PHP goto语句用法实例
Aug 06 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
TP5多入口设置实例讲解
Dec 15 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微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
微信小程序网络请求实现过程解析
2019/11/06 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
python 中split 和 strip的实例详解
2017/07/12 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
一套比较完整的软件测试人员面试题
2012/05/13 面试题
医院工作检讨书范文
2014/02/10 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
小学运动会报道稿
2015/07/22 职场文书
升学宴来宾致辞
2015/07/27 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL