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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
php画图实例
Nov 05 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 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 变量的定义方法
2010/01/26 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
php三元运算符知识汇总
2015/07/02 PHP
php实现短信发送代码
2015/07/05 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
JavaScript DOM节点添加示例
2014/07/16 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
Python中的装饰器用法详解
2015/01/14 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python查看模块安装位置的方法
2018/10/16 Python
python 有效的括号的实现代码示例
2019/11/11 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
自我评价范文
2013/12/22 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
面试后的感谢信范文
2014/02/01 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
租房协议书
2014/09/12 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技