PHP解析html類庫simple_html_dom的轉(zhuǎn)碼bug
這幾天有在用simple_html_dom抓一些文章。不同網(wǎng)站的編碼在國內(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;
}
來看這一行:
$converted_text = iconv($sourceCharset, $targetCharset, $text);
會(huì)引起轉(zhuǎn)碼不正確。比如會(huì)把gb2312的文字轉(zhuǎn)成:
4月26日在<span style="color:#C03">鏈濋槼</span>公園馬術(shù)場舉行的2014浪琴國際馬聯(lián)場地障礙世界杯中國聯(lián)賽資格賽上,24歲的韓壯壯不僅拿到零罰分的成績 ...第7個(gè)出場的<span style="color:#C03">鍖椾含</span>奧運(yùn)騎手趙志文第一個(gè)收獲零罰分,用時(shí)77秒07 ...
既成的事實(shí)了,證明里頭的轉(zhuǎn)碼功能沒有處理好。由于我使用這個(gè)simple_html_dom只是想要用來構(gòu)建dom。我并沒有打算花時(shí)間去很好地處理這個(gè)bug。而是簡單地把
$converted_text = iconv($sourceCharset, $targetCharset, $text);
改成
$converted_text = $text;
就行了。思路就是取消它的轉(zhuǎn)碼。好吧工作不必糾結(jié),可以繼續(xù)了。
- php解析html類庫simple_html_dom(詳細(xì)介紹)
- 淺析php插件 Simple HTML DOM 用DOM方式處理HTML
- PHP simple_html_dom.php+正則 采集文章代碼
- WordPress中轉(zhuǎn)義HTML與過濾鏈接的相關(guān)PHP函數(shù)使用解析
- php基于Snoopy解析網(wǎng)頁html的方法
- PHP抓取網(wǎng)頁、解析HTML常用的方法總結(jié)
- php實(shí)現(xiàn)的一個(gè)很好用HTML解析器類可用于采集數(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)文章
laravel 表單驗(yàn)證實(shí)現(xiàn)多個(gè)字段組合后唯一
這篇文章主要介紹了laravel 表單驗(yàn)證實(shí)現(xiàn)多個(gè)字段組合后唯一,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
通過修改配置真正解決php文件上傳大小限制問題(nginx+php)
對(duì)于nginx+php的一些網(wǎng)站,上傳文件大小會(huì)受到多個(gè)方面的限制,一個(gè)是nginx本身的限制,限制了客戶端上傳文件的大小,一個(gè)是php.ini文件中默認(rèn)了多個(gè)地方的設(shè)置。所以為了解決上傳文件大小限定的問題必須要做出多處修改。以下整理了幾個(gè)地方。2015-09-09
Centos6.5和Centos7 php環(huán)境搭建方法
這篇文章主要介紹了Centos6.5和Centos7 php環(huán)境搭建方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05
php與c 實(shí)現(xiàn)按行讀取文件實(shí)例代碼
這篇文章主要介紹了php與c 實(shí)現(xiàn)按行讀取文件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01

