Simple HTML Dom — фатальная ошибка при использовании load_file

Я пытаюсь разобрать 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" ) );

Я понимаю, что речь идет о кодировке символов, но это все. Я ничего не нашел об этом ни в Google, ни в 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/');

?>

Может ли кто-нибудь сказать мне, что делать? Или какой-то совет, когда что-то подобное происходит.

Заранее спасибо.


person Martin Fejes    schedule 14.07.2012    source источник


Ответы (3)


В вашей сборке PHP отсутствует расширение многобайтовой строки. На самом деле это довольно необычно, если только вы не используете действительно старую сборку PHP или сборку, скомпилированную с необычными параметрами компиляции, поскольку, хотя многобайтовое расширение не включено по умолчанию, оно обычно считается одним из основные расширения, которые более или менее есть в каждой сборке PHP в наши дни.

Если вы используете старую версию PHP, я настоятельно рекомендую обновить ее, если у вас довольно свежая сборка, проверьте с помощью phpinfo(), что у вас установлен мультибайт. Если вы этого не сделаете, вам может потребоваться переустановить или пересобрать PHP из исходного кода.

Если он установлен, --enable-mbstring должен быть в списке параметров компиляции. См. руководство по PHP по многобайтовому расширению, особенно главу по установке, Больше подробностей.

person GordonM    schedule 14.07.2012
comment
Спасибо за ответ, это PHP 5.3, но я спрошу у своего друга. (Я использую его сервер.) - person Martin Fejes; 14.07.2012
comment
Кажется, вы были правы, но для компиляции нового PHP недостаточно оперативной памяти, — говорит он. Спасибо за ваш ответ. - person Martin Fejes; 15.07.2012

У меня была такая же проблема с использованием Amazon EC2 и стандартной установкой PHP. Я сделал следующее (найдено на http://php.net/manual/en/mbstring.installation.php), который решил проблему:

yum install php-mbstring
httpd -k restart
person Luke    schedule 07.12.2012
comment
без yum вы можете использовать sudo apt-get install php7.0-mbstring с той же страницы, что и в приведенном выше ответе. - person Steven; 07.01.2019

Удалите завершающую косую черту (/) в строке URL-адреса, предоставленной в методе load_file(), и это работает.
По-видимому, метод load_file() библиотеки Simple HTML DOM имеет проблему с добавлением косой черты в конец строки URL.

person user1676047    schedule 14.11.2017