8

ひどい(信じてください)HTML構造のHTMLファイルを解析しようとしていますが、これと知識が不足しているため、独自のパーサーを作成できませんでした。後で、Simple HTML Domパーサーを使用してみました。これは、多くの人(SOでも)が推奨しているためです。

simple_html_dom.phpが必要で、オブジェクトを作成しました。それらは機能しているようで、require()関数は「1」を返し、var_dump()-オブジェクトはオブジェクトを返します。

この後、マニュアルと同じようにURLを読み込もうとしましたが、どのURLを試しても致命的なエラーが発生しました。エラーは次のとおりです。

Fatal error: Call to undefined function mb_detect_encoding() in 
             /home/fema/web/subdomain/devel/www_root/parser/
             simplehtmldom_1_5/simple_html_dom.php on line 988

988行目で確認したところ、次のようになっています。

// Have php try to detect the encoding from the text given to us.
        $charset = mb_detect_encoding($this->root->plaintext . "ascii", 
                   $encoding_list = array( "UTF-8", "CP1252" ) );

これは文字エンコードに関するものだと理解していますが、それだけです。私はこれについてグーグルでもSOでも何も見つけていません。

私のコード全体は(プレースホルダーURL)です:

<?php

require('simplehtmldom_1_5/simple_html_dom.php');

// Create a DOM object
$dom = new simple_html_dom();

$dom->load_file('http://www.google.com/');

?>

誰か教えてくれませんか?または、このようなことが起こったときのある種のアドバイス。

前もって感謝します。

4

3 に答える 3

9

PHPのビルドには、マルチバイト文字列拡張子がありません。マルチバイト拡張機能がデフォルトで有効になっていない場合、PHPの非常に古いビルド、または通常とは異なるコンパイルオプションでコンパイルされたビルドを使用していない限り、これが当てはまるのは実際には非常に珍しいことです。最近では、多かれ少なかれすべてのPHPビルドに不可欠な拡張機能があります。

古いバージョンのPHPを実行している場合は、アップグレードすることを強くお勧めします。かなり最近のビルドを使用している場合は、マルチバイトがインストールされていることをphpinfo()で確認してください。そうでない場合は、PHPをソースから再インストールまたは再構築する必要があります。

インストールされている場合--enable-mbstringは、コンパイルオプションのリストに含まれている必要があります。詳細については、マルチバイト拡張に関するPHPマニュアル、特にインストールの章を参照してください。

于 2012-07-14T12:27:35.857 に答える
6

AmazonEC2とPHPの標準インストールを使用しても同じ問題が発生しました。私は問題を解決するために次のことを行いました( http://php.net/manual/en/mbstring.installation.phpにあります):

yum install php-mbstring
httpd -k restart
于 2012-12-07T17:08:52.210 に答える
0

load_file()メソッドで提供されるURL文字列の末尾のスラッシュ(/)を削除すると、機能します。
どうやら、Simple HTML DOM Libraryのload_file()メソッドには、URL文字列の末尾にスラッシュが追加されるという問題があります。

于 2017-11-14T09:44:39.713 に答える