Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kolorowanie kodu i wyciąganie danych z treści
Forum PHP.pl > Forum > Przedszkole
redelek
Witam,

Chcę dodać na swoją stronę moduł GESHI. Działa ładnie. Mam tylko taki mały problem.
Z bazy jest pobierane pole o dużej ilości treści czyli taki opis.
w treści jest wpis
[code=php]
tutaj kod php
[/code]

Jak po pobraniu znaleść w treści te wpisy i wstawić kolorowanie w te miejsca i tak żeby znacznik [code=php] nie był widoczny ?

Będę bardzo zobowiązany za pomoc lub wskazówki

Dzięki
kapuch
preg_replace() nadal by sie do tego.
W pierwszym wypadku, szukasz jakiegos ciagu znaku i zastepujesz go tym samym ciagiem ale ze znacznikami <font color>szukany ciag</font>, albo dodajesz jakis inny znacznik np '<spam></spam>' definiowany w css.
A w drugim [code=php][/code] zastepujesz np '<code></code>';
Niestety nie podam ci wzorca, bo nie lubie/nie umiem wyrazen regularnych tongue.gif
Sprobuj samemu cos wyskrobac, a jak nie to zawsze mozna uzyc str_replace(); biggrin.gif
Popraw mnie, jesli nie o to Ci chodzilo.
wookieb
MOja stopka -> parser bbcode i możesz sobie modyfikować co tam chcesz (dodać języki dostepne w code i podłączyć geshi)
redelek
Super, ale to dla mnie za bardzo zaawansowane,
Zanim dojdę co i jak to ruski rok minie.

Udało mi się znaleźć coś takiego
  1. class ColorSyntax {
  2.  
  3. public function SearchCode($content) {
  4. $content = preg_replace("#\[code lang=\"(.*?)\"\]\'\(.*?)\[\/code\]#sie", '$this->PreformBlock("\\1","\\2");', $content);
  5.  
  6.  
  7. return $content;
  8. }
  9.  
  10. public function PreformBlock($lang, $source){
  11. $source = stripslashes($source);
  12. $result = $this->HighlightCode($source, $lang);
  13. return $result;
  14. }
  15.  
  16. public function ParseCode($content){
  17. return $this->SearchCode($content);
  18. }
  19.  
  20. public function HighlightCode($source, $lang ){
  21. $geshi = new GeSHi($source, $lang);
  22. $geshi->set_source($source);
  23. $result = $geshi->set_language($lang);
  24. $result = $geshi->parse_code();
  25. return $result;
  26. }
  27. }


Problem jest tylko w tym, że jeśli między znacznikami [code lang="php"] wystąpią pojedyncze cudzysłowy lub podwójne to rozwala się cała strona
przykład
  1. $POST='
  2. [code lang="bash"]
  3. #!/bin/bash
  4. plik="/tmp/dane_db.txt"
  5. if [ 'ddd' -ge "dd" ]; then
  6.  
  7. ';


i niestety staje na linijce if , macie pomysł jak to poprawić ?
wookieb
Nie musisz rozkminiać. Wystarczy przeczytać README
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.