Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [PHP] Wyświetlenie kodu PHP
Turson
post 25.08.2013, 15:06:38
Post #1





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


W jaki sposób najlepiej wyświetlać kod PHP na stronie, tak żeby pokazał się czysty kod?

Myślałem o 2 sposobach:
-w textarea (+ obliczenie liczby wierszy)
-w
Kod
KOD PHP
(zamiana na div),wyciągnięcie tekstu z pomiędzy tagów + htmlspecialchars
Go to the top of the page
+Quote Post
Wazniak96
post 25.08.2013, 15:49:42
Post #2





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Proponuję użycie bardzo pomocnej klasy jaką jest GeSHi wink.gif
Go to the top of the page
+Quote Post
fiszol
post 25.08.2013, 18:16:36
Post #3





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

Ostrzeżenie: (0%)
-----


GeSHi lub CodeMirror. Jeśli szukać czegoś absolutnie prostego to hilight_string, highlight_file, czy wsadzisz to w div, czy inny element to już kwestia Twojej inwencji.

Ewentualnie jeśli chcesz serwować całe pliki i masz tego sporo, w configu apache:
Kod
AddType application/x-httpd-php-source .phps

Możesz też dać to w .htaccess, w określonym dirze (powiedzmy sources) i w tedy z rozszerzeniem .php zamiast .phps


--------------------
\o/
Go to the top of the page
+Quote Post
Spawnm
post 25.08.2013, 18:22:18
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




htmlspecialchars + <pre> + kolorująca kod biblioteka js (w google jest tego masa)
Go to the top of the page
+Quote Post
Turson
post 26.08.2013, 15:51:30
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. <form action="index.php?page=test" method="post">
  2. <textarea name="tekst" style="width:400px;height:200px;"></textarea><input type="submit" name="wyslano">
  3. </form>
  4.  
  5. <?PHP
  6. if(isset($_POST["wyslano"]))
  7. {
  8. $tekst=$_POST["tekst"];
  9.  
  10. $tekst = preg_replace("#\[b\](.*?)\[/b\]#si",'<b>\\1</b>',$tekst);
  11. $tekst = preg_replace("#\[code\](.*?)\[/code\]#si",'<div class="code">\\1</div>',$tekst);
  12. include('geshi/geshi.php');
  13. $language = 'php';
  14. $path = 'geshi/geshi';
  15. $geshi = new GeSHi($tekst, $language, $path);
  16. echo $geshi->parse_code();
  17.  
  18. }
  19. ?>


Rezultat jest taki:


Nie wiem jak to rozwiązać by działało poprawnie

Odświeżam. Nie daję rady

Ten post edytował TursoN 26.08.2013, 11:40:32
Go to the top of the page
+Quote Post
muk4
post 26.08.2013, 17:38:44
Post #6





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


jak chcesz żeby przeglądarka interpretowała html (bo chyba o to chodzi) to musisz wykonać preg_replace na pokolorowanym kodzie:
  1. if(isset($_POST["wyslano"]))
  2. {
  3. $tekst=$_POST["tekst"];
  4. include('geshi/geshi.php');
  5.  
  6. $language = 'php';
  7. $path = 'geshi/geshi';
  8. $geshi = new GeSHi($tekst, $language, $path);
  9. $kolorowy = $geshi->parse_code();
  10. $kolorowy = preg_replace("#\[b\](.*?)\[/b\]#si",'<b>\\1</b>',$kolorowy);
  11. $kolorowy = preg_replace("#\[code\](.*?)\[/code\]#si",'<div class="code">\\1</div>',$kolorowy);
  12. echo $kolorowy;
  13.  
  14. }


Ten post edytował muk4 26.08.2013, 17:39:45
Go to the top of the page
+Quote Post
Turson
post 26.08.2013, 18:04:54
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Kod działa prawidłowo specool.gif

Dorzucam gotowca z kilkoma tagami, jakby ktoś szukał, a na pewno nie jedna osoba napotka ten problem.

  1. <form action="index.php?page=test" method="post">
  2. <textarea name="tekst" style="width:400px;height:200px;"></textarea><input type="submit" name="wyslano">
  3. </form>
  4.  
  5. <?PHP
  6. if(isset($_POST["wyslano"]))
  7. {
  8. $tekst=$_POST["tekst"];
  9. include('geshi/geshi.php');
  10.  
  11. $language = 'php';
  12. $path = 'geshi/geshi';
  13. $geshi = new GeSHi($tekst, $language, $path);
  14. $kolorowy = $geshi->parse_code();
  15. $kolorowy = preg_replace("#\[b\](.*?)\[/b\]#si",'<b>\\1</b>',$kolorowy);
  16. $kolorowy = preg_replace("#\[code\](.*?)\[/code\]#si",'<div class="code">\\1</div>',$kolorowy);
  17. $kolorowy = preg_replace("#\[i\](.*?)\[/i\]#si",'<i>\\1</i>',$kolorowy);
  18. $kolorowy = preg_replace("#\[u\](.*?)\[/u\]#si",'<u>\\1</u>',$kolorowy);
  19. $kolorowy = preg_replace("#\[s\](.*?)\[/s\]#si",'<s>\\1</s>',$kolorowy);
  20. $kolorowy = preg_replace("#\[center\](.*?)\[/center\]#si",'<div style="text-align:center">\\1</div>',$kolorowy);
  21. $kolorowy = preg_replace("#\[right\](.*?)\[/right\]#si",'<div style="text-align:right">\\1</div>',$kolorowy);
  22. $kolorowy = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" />',$kolorowy);
  23. $kolorowy = preg_replace("#\[url=(http.*?)\](.*?)\[/url\]#si", "<A HREF=\"\\1\" TARGET=\"_blank\">\\2</A>", $kolorowy);
  24. $kolorowy = preg_replace("#\[color=(.*?)\](.*?)\[/color\]#si",'<font color="\\1">\\2</font>',$kolorowy);
  25. $kolorowy = preg_replace("#\[size=(.*?)\](.*?)\[/size\]#si",'<font size="\\1">\\2</font>',$kolorowy);
  26. echo $kolorowy;
  27.  
  28. }
  29. ?>
  30.  
Go to the top of the page
+Quote Post
fiszol
post 26.08.2013, 18:16:30
Post #8





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $patterns = array(
  3. "#\[b\](.*?)\[/b\]#si",
  4. "#\[code\](.*?)\[/code\]#si",
  5. "#\[i\](.*?)\[/i\]#si",
  6. /* i tak dalej */
  7. );
  8. $replacements = array (
  9. "<b>\\1</b>",
  10. "div class=\"code\">\\1</div>",
  11. "<i>\\1</i>"
  12. /* i tak dalej */
  13. );
  14. $kolorowy = preg_replace($patterns, $replacements, $kolorowy);
  15. ?>



--------------------
\o/
Go to the top of the page
+Quote Post
Turson
post 27.08.2013, 21:49:00
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Wyświetlanie ok, ale jest problem z dodaniem do bazy.
Mianowicie, kiedy w textarea podam kod PHP do bazy nie dodaje się news.

  1. $dzien = date('d');$miesiac = date('n');
  2. $rok = date('Y');
  3. $miesiac_pl = array(1 => 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia');
  4. $date = $dzien." ".$miesiac_pl[$miesiac]." ".$rok;
  5. //Tworzenie linku
  6. $link=$title;
  7. $link = strtolower($link);
  8. $polskie = array(',', ' - ',' ','ę', 'Ę', 'ó', 'Ó', 'Ą', 'ą', 'Ś', 's', 'ł', 'Ł', 'ż', 'Ż', 'Ź', 'ź', 'ć', 'Ć', 'ń', 'Ń','-',"'","/","?", '"', ":", 'ś', '!','.', '&', '&amp;', '#', ';', '[',']','domena.pl', '(', ')', '`', '%', '”', '„', '…');
  9. $miedzyn = array('-','-','-','e', 'e', 'o', 'o', 'a', 'a', 's', 's', 'l', 'l', 'z', 'z', 'z', 'z', 'c', 'c', 'n', 'n','-',"","","","","",'s','','', '', '', '', '', '', '', '', '', '', '', '', '');
  10. $link = str_replace($polskie, $miedzyn, $link);
  11.  
  12. // usuń wszytko co jest niedozwolonym znakiem
  13. $link = preg_replace('/[^0-9a-z\-]+/', '', $link);
  14.  
  15. // zredukuj liczbę myślników do jednego obok siebie
  16. $link = preg_replace('/[\-]+/', '-', $link);
  17.  
  18. // usuwamy możliwe myślniki na początku i końcu
  19. $link = trim($link, '-');
  20. $link = stripslashes($link);
  21.  
  22. // na wszelki wypadek
  23. $link = urlencode($link);
  24.  
  25.  
  26. //Zapis do bazy
  27. $db->exec("INSERT INTO news VALUES(null, '$title', '$link', '$text', $cat, '$date')");
  28. echo 'Artykuł dodany';


Dodałem zamianę < i > na encje, ale na daremno.

  1. $text = str_replace('<', '&lt;', $text);
  2. $text = str_replace('>', '&gt;', $text);
Go to the top of the page
+Quote Post
Wazniak96
post 27.08.2013, 23:45:24
Post #10





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Binduj

PS: nie zamieniaj na encje przez str_replace a przez htmlspecialchars

Ten post edytował Wazniak96 27.08.2013, 23:54:32
Go to the top of the page
+Quote Post
Turson
post 29.08.2013, 11:58:01
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


O co chodzi z bindowaniem?

Aaaa chodziłoo bindowanie PDO biggrin.gif

Dodawanie:
  1. //Filtrowanie
  2. $ins = $db->prepare("INSERT INTO news VALUES(null, '$title', '$link', :text, $cat, '$date')");
  3. $ins->bindValue(':text', $text, PDO::PARAM_STR);
  4. // właściwe wykonanie
  5. $ins->execute();
  6.  
  7.  
  8. //Zapis do bazy
  9. echo 'Artykuł dodany';


Odczyt:
  1. <div class="news">
  2. <div class="news_header">
  3. <div class="news_left">
  4. <div class="news_title">
  5. '.$w["title"].'
  6. </div>
  7. </div>
  8. <div class="news_right">
  9. <img src="images/clock.png"/ style="padding-top:10px;"> '.$w["date"].'
  10. </div>
  11. </div>
  12. <div class="news_text">';
  13. $tekst=$w["content"];
  14. //Zamiana na encje
  15.  
  16. include('bbcode.php');
  17. echo $kolorowy;
  18. echo '</div>
  19. <div class="news_bottom">
  20. <a href="#">[Komentarze: 0]</a>
  21. </div>
  22. </div>';


Z tego co widzę to działa dobrze.

Ale jest inny problem. Tekst w divie się rozjeżdża. Poza tym przez geshi cały tekst artykułu przejmuje jego styl czcionki. Chciałbym, żeby tekst miał swoją czcionkę, a kod swoją.


Oczywiście mam css ustawione.
  1. .news_text{
  2. font-family:verdana;
  3. padding:20px 10px 20px 10px;
  4. font-size:15px;
  5. }
Go to the top of the page
+Quote Post
Wazniak96
post 29.08.2013, 12:08:56
Post #12





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Klik Tutaj masz artykuł od Włodzimierza Gajdy(chyba nie trzeba przedstawiać...). masz tam także fragment opisujący GeSHi. Powinno to rozwiązać twój problem wink.gif

Ten post edytował Wazniak96 29.08.2013, 12:09:19
Go to the top of the page
+Quote Post
Turson
post 5.09.2013, 23:57:37
Post #13





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Dodałem w head
  1. <style type="text/css">
  2. <?php
  3. echo $geshi->get_stylesheet();
  4. ?>
  5. </style>

W wyświetlaniu
  1. $geshi->set_overall_class('code');
  2. $geshi->set_overall_id('kod');


I to formatuje kod, a nie zwykły tekst

I na dodatek w diva, w którym ma być kod wchodzi też zwykły tekst.
http://turson.pl/host/files/2922922.jpg

Chcę wprowadzić taki podział: kod w tagach code ma swoją czcionkę, tekst poza tym ma swoją. I nie wiem jak...

Jakieś pomysły?

Jeśli nie przez geshi, to jest jakiś normalny sposób na wyświetlenie kodu php w tagach bbcode?


Nikt nie potrafi pomóc?

Ten post edytował TursoN 30.08.2013, 13:20:44
Go to the top of the page
+Quote Post
nospor
post 7.09.2013, 11:39:35
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przez geshi masz przepuszczac tylko kod, a nie caly artykul....

By znalezc bbcode w arcie i go zamienic uzywasz np. preg_replace_callback. Kod pisany z palca, moze zawierac bledy:

  1. $search = array (
  2. '#(\[php\])(.*?)\[/php\]#si',
  3. '#(\[code\])(.*?)\[/code\]#si',
  4. '#(\[quote\])(.*?)\[/quote\]#si',
  5. '#(\[css\])(.*?)\[/css\]#si',
  6. '#(\[html\])(.*?)\[/html\]#si',
  7. '#(\[sql\])(.*?)\[/sql\]#si',
  8. '#(\[js\])(.*?)\[/js\]#si',
  9. );
  10.  
  11. $art = preg_replace_callback($search, 'zamien' ,$art);
  12. function zamien($matches){
  13.  
  14. // $matches[0] zawiera kod ktory masz przepuscic przez geshi i ta funkcja ma zwrocic to co wypluwa geshi
  15.  
  16. return to co wypluwa geshi z $matches[0]
  17.  
  18.  
  19. }


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post 7.09.2013, 12:32:47
Post #15





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


To wyższa jazda jak dla mnie. Wystrugałem następujący kod:

  1. <form action="index.php?page=test" method="post">
  2. <textarea name="tekst" style="width:400px;height:200px;"></textarea><input type="submit" name="wyslano">
  3. </form>
  4.  
  5. <?PHP
  6. if(isset($_POST["wyslano"]))
  7. {
  8. $art=($_POST["tekst"]);
  9. $search = array (
  10. '#(\[php\])(.*?)\[/php\]#si',
  11. '#(\[code\])(.*?)\[/code\]#si',
  12. '#(\[quote\])(.*?)\[/quote\]#si',
  13. '#(\[css\])(.*?)\[/css\]#si',
  14. '#(\[html\])(.*?)\[/html\]#si',
  15. '#(\[sql\])(.*?)\[/sql\]#si',
  16. '#(\[js\])(.*?)\[/js\]#si',
  17. );
  18.  
  19. $art = preg_replace_callback($search, 'zamien' ,$art);
  20. function zamien($matches){
  21.  
  22. include('geshi/geshi.php');
  23. $language = 'php';
  24. $path = 'geshi/geshi';
  25. $geshi = new GeSHi($matches[0], $language, $path);
  26. $pokaz = $geshi->parse_code();
  27.  
  28. return $pokaz;
  29.  
  30.  
  31. }
  32. }
  33. ?>

Warning: preg_replace_callback(): Requires argument 2, 'zamien', to be a valid callback in ... on line 19

Co jest błedem?
Go to the top of the page
+Quote Post
nospor
post 9.09.2013, 07:38:29
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Deklaracja funkcji zamien nie moze byc w IF


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post 9.09.2013, 09:19:12
Post #17





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. <form action="index.php?page=test" method="post">
  2. <textarea name="tekst" style="width:400px;height:200px;"></textarea><input type="submit" name="wyslano">
  3. </form>
  4.  
  5. <?PHP
  6. if(isset($_POST["wyslano"]))
  7. {
  8. $art=($_POST["tekst"]);
  9. $search = array (
  10. '#(\[php\])(.*?)\[/php\]#si',
  11. '#(\[code\])(.*?)\[/code\]#si',
  12. '#(\[quote\])(.*?)\[/quote\]#si',
  13. '#(\[css\])(.*?)\[/css\]#si',
  14. '#(\[html\])(.*?)\[/html\]#si',
  15. '#(\[sql\])(.*?)\[/sql\]#si',
  16. '#(\[js\])(.*?)\[/js\]#si',
  17. );
  18.  
  19. $art = preg_replace_callback($search, 'zamien' ,$art);
  20. }
  21. function zamien($matches){
  22.  
  23. include('geshi/geshi.php');
  24. $language = 'php';
  25. $path = 'geshi/geshi';
  26. $geshi = new GeSHi($matches[0], $language, $path);
  27. $matches = $geshi->parse_code();
  28. echo $matches;
  29. return $matches;
  30.  
  31.  
  32. }
  33. zamien($art);
  34. ?>


Co tu jest źle?
Po prostu wyświetla tylko jeden znak - "<"
Go to the top of the page
+Quote Post
nospor
post 9.09.2013, 09:25:59
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




czem robisz to??
zamien($art);
Czy ja ci gdziesz pisalem ze z palucha masz wywolywac zamien?? Nie, zamien ma byc w preg_

$matches = $geshi->parse_code();
czemu napisujesz matches? TO juz nie mozesz innej zmiennej stworzyc tylko musisz nadpisywac parametr funkcji?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post 9.09.2013, 09:38:37
Post #19





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. if(isset($_POST["wyslano"]))
  2. {
  3. $art=($_POST["tekst"]);
  4. $search = array (
  5. '#(\[php\])(.*?)\[/php\]#si',
  6. '#(\[code\])(.*?)\[/code\]#si',
  7. '#(\[quote\])(.*?)\[/quote\]#si',
  8. '#(\[css\])(.*?)\[/css\]#si',
  9. '#(\[html\])(.*?)\[/html\]#si',
  10. '#(\[sql\])(.*?)\[/sql\]#si',
  11. '#(\[js\])(.*?)\[/js\]#si',
  12. );
  13.  
  14. $art = preg_replace_callback($search, 'zamien' ,$art);
  15. }
  16. function zamien($matches){
  17.  
  18. include('geshi/geshi.php');
  19. $language = 'php';
  20. $path = 'geshi/geshi';
  21. $geshi = new GeSHi($matches[0], $language, $path);
  22. $kod = $geshi->parse_code();
  23. echo $kod;
  24. return $kod;
  25.  
  26.  
  27. }


Dalej źle
Go to the top of the page
+Quote Post
nospor
post 9.09.2013, 09:48:00
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak to mozemy gadac do jutra.....

Co zle? Jaki masz tekst w arcie?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 19:06