千家信息网

如何解决PHP解析html类库simple_html_dom的转码bug

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要为大家展示了"如何解决PHP解析html类库simple_html_dom的转码bug",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何解决P
千家信息网最后更新 2025年02月03日如何解决PHP解析html类库simple_html_dom的转码bug

这篇文章主要为大家展示了"如何解决PHP解析html类库simple_html_dom的转码bug",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何解决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日在鏈濋槼公园马术场举行的2014浪琴国际马联场地障碍世界杯中国联赛资格赛上,24岁的韩壮壮不仅拿到零罚分的成绩 ...第7个出场的鍖椾含奥运骑手赵志文第一个收获零罚分,用时77秒07 ...

既成的事实了,证明里头的转码功能没有处理好。由于我使用这个simple_html_dom只是想要用来构建dom。我并没有打算花时间去很好地处理这个bug。而是简单地把

复制代码 代码如下:


$converted_text = iconv($sourceCharset, $targetCharset, $text);

改成

复制代码 代码如下:


$converted_text = $text;

以上是"如何解决PHP解析html类库simple_html_dom的转码bug"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

代码 内容 篇文章 utf-8 罚分 处理 学习 帮助 不同 一行 世界 事实 公园 功能 只是 国际 场地 奥运 成绩 文字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网御数据库安全审计 内网电影服务器 做软件开发的公司叫什么 linux搭建游戏服务器 哈尔滨天成软件开发 中小学幼儿园网络安全巡检制度 数据库每次只能传3000条 计算服务器 管理办法 大数据技术和网络技术的区别 台湾省疫情数据库 计算机网络技术学院专升本学校 图片怎么插入数据库中 莱芜职业学院软件开发好就业吗 京科联通青岛网络技术有限公司 戴尔r620服务器开启显卡 初中毕业生可以学软件开发吗 网络安全产品的产品属性 IBM网络技术工程师 潍坊网泰网络技术有限公司 仙桃哪里有软件开发企业 学校安全情况数据库 数据库系统设计的技术现状 linux搭建游戏服务器 企业服务器上储存文件 网络安全靠人民系列 软件开发接私活哪个平台好 网络安全防护网怎么做 网页的动态内容能在服务器生成吗 常用数据库备份有哪些 自学网络安全基本功
0