1. <?php
  2. require_once('geshi/geshi.php');
  3. $source = '<?php
  4. echo \'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  6. <head>
  7. <title>Tytuł</title>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9. </head>
  10. <body>
  11. <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">
  12. Przykładowy tekst.
  13. Przykładowy tekst w drugiej linii.
  14. Poniżej długi ciąg znaków:
  15. abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcab
    cabcabcabcabcabcabcabc
  16. </div>
  17. </body>
  18. </html>\';
  19. ?>';
  20. $geshi = new GeSHi('', '');
  21. $geshi->set_encoding('UTF-8');
  22. $geshi->set_source($source);
  23. $geshi->set_language('php'); # Jeśli zmienię na html4strict to jest OK!
  24. $parsed_code = $geshi->parse_code();
  25. echo $parsed_code;
  26. echo "<br>\n Length: ".mb_strlen($parsed_code);
  27. ?>

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:
  1. $geshi = new GeSHi('', '');
  2. $geshi->set_source($source);
  3. $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ć:
  1. $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ę:
  1. </body>
  2. </html>

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.