PHP解析html類(lèi)庫(kù)simple_html_dom的轉(zhuǎn)碼bug
這幾天有在用simple_html_dom抓一些文章。不同網(wǎng)站的編碼在國(guó)內(nèi)基本上是gbk gb2312 utf-8。而以gb2312和utf-8居多。
我這一版的simple_html_dom有一個(gè)方法 convert_text 是這個(gè)樣子的。
// 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;
}
來(lái)看這一行:
$converted_text = iconv($sourceCharset, $targetCharset, $text);
會(huì)引起轉(zhuǎn)碼不正確。比如會(huì)把gb2312的文字轉(zhuǎn)成:
4月26日在<span style="color:#C03">鏈濋槼</span>公園馬術(shù)場(chǎng)舉行的2014浪琴?lài)?guó)際馬聯(lián)場(chǎng)地障礙世界杯中國(guó)聯(lián)賽資格賽上,24歲的韓壯壯不僅拿到零罰分的成績(jī) ...第7個(gè)出場(chǎng)的<span style="color:#C03">鍖椾含</span>奧運(yùn)騎手趙志文第一個(gè)收獲零罰分,用時(shí)77秒07 ...
既成的事實(shí)了,證明里頭的轉(zhuǎn)碼功能沒(méi)有處理好。由于我使用這個(gè)simple_html_dom只是想要用來(lái)構(gòu)建dom。我并沒(méi)有打算花時(shí)間去很好地處理這個(gè)bug。而是簡(jiǎn)單地把
$converted_text = iconv($sourceCharset, $targetCharset, $text);
改成
$converted_text = $text;
就行了。思路就是取消它的轉(zhuǎn)碼。好吧工作不必糾結(jié),可以繼續(xù)了。
- php解析html類(lèi)庫(kù)simple_html_dom(詳細(xì)介紹)
- 淺析php插件 Simple HTML DOM 用DOM方式處理HTML
- PHP simple_html_dom.php+正則 采集文章代碼
- WordPress中轉(zhuǎn)義HTML與過(guò)濾鏈接的相關(guān)PHP函數(shù)使用解析
- php基于Snoopy解析網(wǎng)頁(yè)html的方法
- PHP抓取網(wǎng)頁(yè)、解析HTML常用的方法總結(jié)
- php實(shí)現(xiàn)的一個(gè)很好用HTML解析器類(lèi)可用于采集數(shù)據(jù)
- 淺析php插件 HTMLPurifier HTML解析器
- 解析關(guān)于java,php以及html的所有文件編碼與亂碼的處理方法匯總
- 解析PHP生成靜態(tài)html文件的三種方法
- 用php解析html的實(shí)現(xiàn)代碼
- php使用simple_html_dom解析HTML示例
相關(guān)文章
CI框架封裝的常用圖像處理方法(縮略圖,水印,旋轉(zhuǎn),上傳等)
這篇文章主要介紹了CI框架封裝的常用圖像處理方法,涉及針對(duì)圖像的縮略圖、水印、旋轉(zhuǎn)、上傳等操作,需要的朋友可以參考下2016-11-11ajax完美實(shí)現(xiàn)兩個(gè)網(wǎng)頁(yè) 分頁(yè)功能的實(shí)例代碼
ajax完美實(shí)現(xiàn)兩個(gè)網(wǎng)頁(yè) 分頁(yè)功能的實(shí)例代碼,需要的朋友可以參考一下2013-04-04基于ubuntu下nginx+php+mysql安裝配置的具體操作步驟
本篇文章介紹了,基于ubuntu下nginx+php+mysql安裝配置的具體操作步驟。需要的朋友參考下2013-04-04如何使用純PHP實(shí)現(xiàn)定時(shí)器任務(wù)(Timer)
本文主要介紹了如何使用純PHP實(shí)現(xiàn)純粹的定時(shí)器任務(wù),且能適應(yīng)認(rèn)識(shí)任務(wù)業(yè)務(wù)需求,需要的朋友可以參考下2015-07-07PHP 只允許指定IP訪(fǎng)問(wèn)(允許*號(hào)通配符過(guò)濾IP)
今天有朋友問(wèn)我如何只允許指定IP訪(fǎng)問(wèn),默認(rèn)禁止其它ip訪(fǎng)問(wèn),腳本之家小編以前分享的是如何限制指定ip訪(fǎng)問(wèn),這里正好分享下,需要的朋友可以參考下2014-07-07