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 远程图片保存到本地的函数类
Dec 08 PHP
php下将XML转换为数组
Jan 01 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 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中通过curl smtp发送邮件
2012/06/05 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
在Python中使用Mako模版库的简单教程
2015/04/08 Python
Python and、or以及and-or语法总结
2015/04/14 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
python同时遍历两个list用法说明
2020/05/02 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
经典c++面试题六
2012/01/18 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
法学毕业生自荐信
2013/11/13 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
《去年的树》教学反思
2016/02/18 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript