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 相关文章推荐
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
浅谈php扩展imagick
Jun 02 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
php ajax数据传输和响应方法
Aug 21 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
php四种基础算法代码实例
2013/10/29 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
Smarty模板配置实例简析
2019/07/20 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
django框架auth模块用法实例详解
2019/12/10 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python实现串口通信的示例代码
2020/02/10 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
文明倡议书
2015/01/19 职场文书
结婚典礼致辞
2015/07/28 职场文书
Python实现批量自动整理文件
2022/03/16 Python
Python利用capstone实现反汇编
2022/04/06 Python
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android