简单的HTML Dom - 使用load_file时出现致命错误

时间:2012-07-14 12:16:17

标签: php html-parsing fatal-error simple-html-dom

我试图解析一个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上的任何相关信息。

我的整个代码是(占位符网址):

<?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/');

?>

有谁能告诉我该怎么办?或者在发生类似这样的事情时给出某种建议。

提前致谢。

3 个答案:

答案 0 :(得分:9)

您的PHP构建缺少多字节字符串扩展。这种情况实际上很不寻常,除非你使用的是非常旧的PHP版本或者使用不常见的编译选项编译的版本,因为虽然默认情况下没有启用多字节扩展,但它通常被认为是现在或多或少每个PHP构建的基本扩展。

如果您运行的是旧版本的PHP,我强烈建议您进行升级,如果您有一个相当新的版本,请使用phpinfo()检查您是否安装了多字节。如果不这样做,则可能需要从源重新安装或重建PHP。

如果已安装,--enable-mbstring应该在编译选项列表中。有关详细信息,请参阅多字节扩展的PHP手册,尤其是chapter on installation

答案 1 :(得分:6)

我使用Amazon EC2&amp; PHP的标准安装。我做了以下(在http://php.net/manual/en/mbstring.installation.php上找到)解决了这个问题:

yum install php-mbstring
httpd -k restart

答案 2 :(得分:0)

删除load_file()方法中提供的URL字符串中的尾部正斜杠(/),它可以正常工作。
显然,Simple HTML DOM Library的load_file()方法存在一个问题,即正斜杠被附加到URL字符串的末尾。