ホームページ  >  記事  >  バックエンド開発  >  PHP 解析 HTML クラス ライブラリ simple_html_dom トランスコーディング bug_PHP チュートリアル

PHP 解析 HTML クラス ライブラリ simple_html_dom トランスコーディング bug_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:29:32928ブラウズ

私は最近、いくつかの記事を取得するために simple_html_dom を使用しています。中国のさまざまな Web サイトのエンコードは、基本的に gbk gb2312 utf-8 です。それらのほとんどは gb2312 と utf-8 です。

私のバージョンの simple_html_dom には、次のようなメソッド Convert_text があります。

コードをコピーします コードは次のとおりです:

// PaperG - 2 つの文字セットが同じでない場合にテキストをある文字セットから別の文字セットに変換する関数。
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, "ソース charset: " . $sourceCharset . " target charset: " . $targetCharset);}
if (!empty($sourceCharset) && !empty( $targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0))
{
// 報告されたエンコーディングが間違っている可能性があり、テキストが実際に既に UTF-8 であるかどうかを確認します
if ((strcasecmp($targetCharset, 'UTF-8 ') == 0) && ($this->is_utf8($text)))
{
$converted_text = $text;
}
else
{
$converted_text = iconv($sourceCharset, $targetCharset , $text) ;
}
}
// 出力する utf-8 テキストに愚かな BOM 問題がないことを確認しましょう。
if ($targetCharset == 'UTF-8')
{
if ( substr($converted_text, 0, 3) == "xefxbbxbf")
{
$converted_text = substr($converted_text, 3);
}
if (substr($converted_text, -3) == "xefxbbxbf" ")
{ T $ Converted_text = substr ($ Converted_text, 0, -3);
この行を見てください:




コードをコピーします
コードは次のとおりです:

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

不正確なトランスコーディングが発生します。たとえば、gb2312 のテキストは次のように変換されます:
コードをコピーします

コードは次のとおりです:
2014 年ロンジン国際馬術連盟は、4 月 26 日に chain で開催されます。公園馬術競技場 ワールドカップ障害物競技大会の中国リーグ予選トーナメントで、24 歳のハン・荘荘はペナルティーポイントをゼロにしただけでなく、出場した 7 人目の選手でもありました鍖椾汉 オリンピックライダーのZhao Zhiwenは、77.07秒のタイムでペナルティポイントを獲得しなかった最初の選手でした...

これは既成事実であり、内部のトランスコーディング機能が適切に処理されていないことを証明しています。私はこの simple_html_dom を使用しているので、DOM を構築したいだけです。このバグを適切に処理するために時間を掛けるつもりはありませんでした。代わりに単に と入力します
コードをコピーします

コードは次のとおりです:
$converted_text = iconv($sourceCharset, $targetCharset, $text);

に変更されました

コードをコピーします コードは次のとおりです:

$converted_text = $text;
以上です。アイデアは、そのトランスコーディングをキャンセルすることです。さて、仕事のことは心配しないで、続行できます。

http://www.bkjia.com/PHPjc/774994.html

www.bkjia.comtru​​e
http://www.bkjia.com/PHPjc/774994.html

技術記事
最近、simple_html_dom を使用していくつかの記事をキャプチャしています。中国のさまざまな Web サイトのエンコードは、基本的に gbk gb2312 utf-8 です。それらのほとんどは gb2312 と utf-8 です。 私のバージョンの simple_html_dom にはメソッドがあります...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。