我试图解析一个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/');
?>
有谁能告诉我该怎么办?或者在发生类似这样的事情时给出某种建议。
提前致谢。
答案 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字符串的末尾。