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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
PHP面向对象法则
Feb 23 PHP
php计算十二星座的函数代码
Aug 21 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
php调用自己java程序的方法详解
May 13 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
一文搞懂PHP中的抽象类和接口
May 25 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处理json时中文问题的解决方法
2011/04/12 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
PHP多进程简单实例小结
2019/11/09 PHP
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
js面向对象编程总结
2017/02/16 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python检测生僻字的实现方法
2016/10/23 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
学校采购员岗位职责
2014/01/02 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
应届大学生求职信
2014/07/20 职场文书
服务明星事迹材料
2014/12/29 职场文书
运动会通讯稿600字
2015/07/20 职场文书
小学生运动会广播
2015/08/19 职场文书