2012-07-14 17 views
8

Próbuję parsować plik HTML, który ma okropną (wierz mi, to jest) strukturę HTML, a z tego powodu i mojego braku wiedzy, nie mogłem napisać własnego parser. Później próbowałem używać prostego parsera HTML Dom, ponieważ wiele osób (również na SO) poleca to.Prosty HTML Dom - Błąd krytyczny podczas korzystania z pliku load_file

Wymagałem simple_html_dom.php, a następnie utworzyłem obiekt. Wydają się działać, funkcja require() zwraca "1" i var_dump() - obiekt zwraca obiekt.

Po tym spróbowałem załadować adres URL tak, jak zostało to zrobione w instrukcji, ale dostałem fatalny błąd, niezależnie od tego, jaki URL próbowałam. Błąd był następujący:

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 

Sprawdziłem co jest na linii 988 i jest on następujący:

// 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")); 

Rozumiem, że chodzi o kodowanie znaków, ale to wszystko. Nie znalazłem nic o tym ani z Google, ani z SO.

Mój cały kod jest (zastępczy 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/'); 

?> 

Czy ktoś może mi powiedzieć, co robić? Lub jakąś radę, gdy coś takiego się dzieje.

Z góry dziękuję.

Odpowiedz

9

W Twojej kompilacji PHP brakuje rozszerzenia ciągów wielobajtowych. W rzeczywistości jest to dość niezwykłe, chyba że używasz naprawdę starej kompilacji PHP lub kompilowanej z nietypowymi opcjami kompilacji, ponieważ podczas gdy rozszerzenie wielobajtowe nie jest włączone domyślnie, jest zwykle uważane za jedno z podstawowe rozszerzenia, które mniej więcej każda kompilacja PHP ma w dzisiejszych czasach.

Jeśli używasz starszej wersji PHP, zdecydowanie zalecam aktualizację, jeśli masz dość aktualną kompilację, sprawdź w phpinfo(), czy masz zainstalowany wielobajtowy. Jeśli nie, może być konieczne ponowne zainstalowanie lub przebudowanie PHP ze źródła.

Jeśli jest zainstalowany, --enable-mbstring powinien znajdować się na liście opcji kompilacji. Aby uzyskać więcej informacji, zapoznaj się z instrukcją PHP w rozszerzeniu wielobajtowym, szczególnie o nazwie chapter on installation.

+0

Dziękuję za odpowiedź, to jest PHP 5.3, ale zapytam mojego przyjaciela. (Używam jego serwera.) –

+0

Wygląda na to, że masz rację, ale brakuje pamięci RAM do kompilacji nowego PHP, mówi. Dziękuję za Twoją odpowiedź. –

+0

Świetna Wielka odpowiedź .. –

0

Zdejmij tylny ukośnik (/) w swoim adresie URL podany w metodzie load_file() i to działa.
Najwyraźniej metoda load_file() biblioteki Simple HTML DOM ma problem z dodawaniem ukośników do końca ciągu URL.

Powiązane problemy