8

我正在尝试解析具有糟糕(相信我,它是)HTML 结构的 HTML 文件,并且由于这一点以及我缺乏知识,我无法编写自己的解析器。后来我尝试使用 Simple HTML Dom 解析器,因为很多人(在 SO 上也是如此)推荐它。

我需要 simple_html_dom.php,然后创建了对象。它们似乎有效,require() 函数返回“1”,而 var_dump()-ing 对象返回一个对象。

在此之后,我尝试按照手册中的方式加载 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

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

百胜安装 php-mbstring
httpd -k 重启
于 2012-12-07T17:08:52.210 回答
0

删除 load_file() 方法中提供的 URL 字符串中的尾部正斜杠 (/) 并且它可以工作。
显然,简单 HTML DOM 库的 load_file() 方法存在将正斜杠附加到 URL 字符串末尾的问题。

于 2017-11-14T09:44:39.713 回答