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的论坛(6)
Oct 09 PHP
php防攻击代码升级版
Dec 29 PHP
php文本转图片自动换行的方法
Mar 13 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
10个简化PHP开发的工具
Dec 25 PHP
用PHP代码给图片加水印
Jul 01 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP源码之explode使用说明
2011/08/05 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
斜45度寻路实现函数
2009/08/20 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JS实现随机抽取三人
2019/11/06 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python实现AES加密与解密
2019/03/28 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Python 面向对象部分知识点小结
2020/03/09 Python
python 进程池pool使用详解
2020/10/15 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
宿舍违规检讨书
2014/01/12 职场文书
服装店营销方案
2014/03/10 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书