php html转dom,PHP解析html类库simple_html_dom的转码bug
这几天有在用simple_html_dom抓一些文章。不同网站的编码在国内基本上是gbk gb2312 utf-8。而以gb2312和utf-8居多。
我这一版的simple_html_dom有一个方法 convert_text 是这个样子的。
复制代码 代码如下:
// PaperG - Function to convert the text from one character set to another if the two sets are not the same.
function convert_text($text)
{
global $debug_object;
if (is_object($debug_object)) {$debug_object->debug_log_entry(1);}
$converted_text = $text;
$sourceCharset = "";
$targetCharset = "";
if ($this->dom)
{
$sourceCharset = strtoupper($this->dom->_charset);
$targetCharset = strtoupper($this->dom->_target_charset);
}
if (is_object($debug_object)) {$debug_object->debug_log(3, "source charset: " . $sourceCharset . " target charaset: " . $targetCharset);}
if (!empty($sourceCharset) && !empty($targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0))
{
// Check if the reported encoding could have been incorrect and the text is actually already UTF-8
if ((strcasecmp($targetCharset, 'UTF-8') == 0) && ($this->is_utf8($text)))
{
$converted_text = $text;
}
else
{
$converted_text = iconv($sourceCharset, $targetCharset, $text);
}
}
// Lets make sure that we don't have that silly BOM issue with any of the utf-8 text we output.
if ($targetCharset == 'UTF-8')
{
if (substr($converted_text, 0, 3) == "/xef/xbb/xbf")
{
$converted_text = substr($converted_text, 3);
}
if (substr($converted_text, -3) == "/xef/xbb/xbf")
{
$converted_text = substr($converted_text, 0, -3);
}
}
return $converted_text;
}
来看这一行:
复制代码 代码如下:
$converted_text = iconv($sourceCharset, $targetCharset, $text);
会引起转码不正确。比如会把gb2312的文字转成:
复制代码 代码如下:
4月26日在
php html转dom,PHP解析html类库simple_html_dom的转码bug相关推荐
- php解析html类库simple_html_dom
本文介绍simple_html_dom,就是用来处理网页,可以写爬虫抓取信息: 背景:在项目中获得一个很长的html标签的长字符串,需要解析到里面所有的标签的的src地址: 用正则匹配来做比较麻烦,在 ...
- 页面加载完毕_【前端面试】dom 的解析,加载,渲染
本文会把 dom 的解析,加载,渲染结合 window.performance 一起讲. dom 的解析 解析:HTMl 解析器把 HTML 构建成 HTML 树形数据结构,也就是 DOM 树. 注意 ...
- python 之模块之 xml.dom.minidom解析xml
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...
- JavaXml教程(二)使用DOM方式解析XML文件
DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...
- [css] css的加载会阻塞DOM树解析和渲染吗?为什么
[css] css的加载会阻塞DOM树解析和渲染吗?为什么 css的加载不会阻止DOM树的解析 css的加载会阻止DOM树的渲染,因为css的下载完成后解析成CSSOM与DOM生成渲染树后,页面才会渲 ...
- 粤嵌学习打卡第19天(基于DOM方式解析、生成XML文档)
今天我们来聊聊基于DOM方式实现解析和生成XML文档 一般web开发的xnl文档: 基于DOM处理XML文档 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SIQAET ...
- 舒工深度解析不规则场地座位二维码生成规则
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...
- [学习总结]7、Android AsyncTask完全解析,带你从源码的角度彻底理解
我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制.之前我也写过了一篇文章从源码层面分析了Android的异步消息处理机制,感兴 ...
最新文章
- CentOS 7.3 源码安装 OpenVAS 9
- Python按行读取文件、写文件
- install ros indigo tf2
- Spring boot 和Vue开发中CORS跨域问题
- 指定字符串按指定长度进行剪切
- 计算机改成服务器,旧电脑主机如何改成服务器
- mysql分列查询,Mysql导出问题,乱码问题,为分列问题解决!!!
- android gridview行分割线,Android中控件GridView实现设置行列分割线的方法示例
- 设计模式(二)构建型模式
- 二叉树反转java实现
- JAVA命令行运行时设置参数
- 【图像隐写】基于matlab LBP数字水印嵌入攻击提取【含Matlab源码 1672期】
- AndroidStudio 抓包工具Profiler使用
- 基于微信功能社群助手
- 3D视觉从入门到精通知识星球
- IDEA找不到应用程序(localhost:8080)
- 雾里看菊:热点IP是怎么生成的
- DP4344音频转换芯片ACD/DAC完全兼容CS4344音频解码
- java旧版下载地址_Java下载 - 最新版、历史版本的官方下载地址
- 国家普通话水平测试官方手机软件,普通话测试软件 – 免费手机普通话测试软件,用手机模拟测试普通话水平[Android]...