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显示MySQL数据的三种方法
Jun 05 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
php 保留字列表
Oct 04 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
laravel model 两表联查示例
Oct 24 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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/06/30 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
jquery offset函数应用实例
2012/11/14 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
django创建超级用户过程解析
2019/09/18 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
幼儿园教师工作感言
2014/02/15 职场文书
请假条怎么写
2014/04/10 职场文书
心理健康日活动总结
2014/05/08 职场文书
个人授权委托书范本
2014/09/14 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
团委工作总结2015
2015/04/02 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
详解Golang如何优雅的终止一个服务
2022/03/21 Golang