<?php require_once('geshi/geshi.php'); $source = '<?php echo \'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> <head> <title>Tytuł</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div style="margin: 0 auto; width: 300px; overflow: auto; border: 1px solid #065fa1; background-color: #ffffff; padding: 10px; font-family: Verdana, Tahoma; font-size: 11px; color: #000"> Przykładowy tekst. Przykładowy tekst w drugiej linii. Poniżej długi ciąg znaków: abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcab
cabcabcabcabcabcabcabc </div> </body> </html>\'; ?>'; $geshi = new GeSHi('', ''); $geshi->set_encoding('UTF-8'); $geshi->set_source($source); $geshi->set_language('php'); # Jeśli zmienię na html4strict to jest OK! $parsed_code = $geshi->parse_code(); ?>
Po odpaleniu powyższego kodu nie otrzymuję żadnego wyniku ani błędu w przeglądarce - jedynie chwilę trzeba czekać aż przeglądarka (testowałem w Operze) otrzyma odpowiedź czyli pokaże, że załadowano stronę.
Plik jest oczywiście zapisany w UTF-8.
Co do tego:
$geshi = new GeSHi('', ''); $geshi->set_source($source); $geshi->set_language('php');
Zastosowałem taką konstrukcję, bo parsowanie kodu wywołuję w pętli - wyodrębniam wszystko pomiędzy tagami bbcode i odpowiednio parsuję za pomocą GeSHi, a bez sensu byłoby wykonywać:
$geshi = new GeSHi($source, 'php');
w każdym przebiegu pętli.
Tutaj jedynie przedstawiłem uproszczony kod, który wciąż powoduje problem.
Widzicie jakiś błąd w powyższym kodzie? Bo ja nie...
Jeśli usunę:
To GeSHi poprawnie pokoloruje składnię i nie będzie żadnych błędów.
Również zamiana na html4strict nie powoduje problemów. Tylko coś z tym kolorowaniem składni PHP...
Na początku myślałem, że może tu chodzi o zamykające tagi body i html, ale wystarczy wstawić jeszcze jeden </div> i też będzie problem.
Wersja GeSHi: 1.0.8.6.
Jeśli nie znacie sposobu rozwiązania błędu to może polecicie inny skrypt, z którym nie będzie takowych problemów?
Na zdalnym serwerze nie ma tego problemu.
Natomiast nie wspomniałem, że na localhost występował błąd serwera - Opera wyświetlała, że połączenie zostało zresetowane. Natomiast w logach Apache nie znalazłem nic, co mogłoby mieć związek z tym błędem.