ďťż

[php] Problem z działaniem [code]

       

Podstrony


telcocafe

Witam.

To jest kod mojej funkcji bbcode

function bbcode($str){ // tutaj jest jeszcze inny kod - nie istotny;-) $str = nl2br($str); $str = preg_replace_callback("#\[code\](.*?)\[/code\]#si" , "bbcode_code", $str); } function bbcode_code($str) { $stri = preg_replace('#\[code\](.*?)\[\/code\]#se' , "'<div style=\"background-color: #E5E5E5;\">KOD</div><div style=\"background-color: #EEEEEE;\">'.highlight_string(stripslashes('$1'), true).'</div>'", $str); return $stri[0]; } echo bbcode(' [ code ]<?php include (\'lol.php\'); echo $kod; //end of script ?>[ /code ] ');

efektem działania skryptu jest

KOD <?php <br /> include ('lol.php');<br /> echo $kod; <br /> //end of script <br&nbs p;/> ?>

i tu moje pytanie - co zrobić aby [ code ] nie bylo filtrowane przez nl2br ?? ( bez tego wszystko jest ok )
Użytkownik fenekpl edytował ten post 01 kwiecień 2007, 10:53


Nie wiem, czy dobrze zrozumiałem ;) Jeśli tak, to można najprościej przerzucić wykonywanie nl2br() :)
function bbcode_code($str) { $stri = preg_replace('#\[code\](.*?)\[\/code\]#se' , "'<div style=\"background-color: #E5E5E5;\">KOD</div><div style=\"background-color: #EEEEEE;\">'.nl2br(highlight_string(stripslashes('$1'), true)).'</div>'", $str); return $stri[0]; } function bbcode($str) { $str = preg_replace_callback("#\[code\](.*?)\[/code\]#si" , "bbcode_code", $str); }

Tak w ogóle, to bym dał taką funkcję (nie wiem czy chodzi, acz powinna ;)):
function bbcode_code($str) { return '<div style="background-color: #E5E5E5;">KOD</div><div style="background-color: #EEEEEE;">'.nl2br(highlight_string(stripslashes($str[1]), true)).'</div>'; } //a wywołanie bbcode() tak jak wyżej
Użytkownik DJ_ProG edytował ten post 01 kwiecień 2007, 12:05
Własnie nie o to chodzi...
chce żeby [ code ] NIE BYŁO filtrowane przez nl2br...

A kod
function bbcode($str){ // tutaj jest jeszcze inny kod - nie istotny;-) $str = nl2br($str); $str = preg_replace_callback("#\[code\](.*?)\[/code\]#si", "bbcode_code", $str); }

musi taki pozostać - poza [ code ] znajdują sie także inne znaczniki bb ( [ b ], [ i ], itd ).
jedynie ze znacznikiem code jest problem.
Oczywiście, mógłbym [ code ] zmienić na html już przed zapisem do bazy, ale wtedy baza będzie bardziej "zasmiecona"

function bbcode($str){ // tutaj jest jeszcze inny kod - nie istotny;-) $str = preg_replace_callback("#\[code\](.*?)\[/code\]#si" , "bbcode_code", $str); $str = nl2br($str); }



bikstopa: i to chyba nie to :P
fenekpl: słuchaj, nl2br zamienia brackety na afair <br />...
Więc wystarczy, że użyjesz str_replace :P To chyba jedyna metoda ;)

ok, tak jest ok :>
testowalem:

<?php
function bbcode($str){

// tutaj jest jeszcze inny kod - nie istotny;-)
$str = preg_replace_callback("#\[code\](.*?)\[/code\]#si", "bbcode_code", $str);
$str = nl2br($str);
return $str;
}

function bbcode_code($str) {
$stri = preg_replace('#\[code\](.*?)\[\/code\]#se', "'<div style=\"background-color: #E5E5E5;\">KOD</div><div style=\"background-color: #EEEEEE;\">'.highlight_string(stripslashes('$1'), true).'</div>'", $str);
$x = str_replace('<br />', '', $stri[0]);
return $x;
}

echo bbcode('[code]<?php
include (\'lol.php\');
echo $kod;
//end of script
?>[/code]');
?>

Użytkownik bikstopa edytował ten post 02 kwiecień 2007, 07:05
A co, jeśli chce, by znak nowej linii nadal "był" ? :P
Ja w bbcode() dałbym nl2br() przed wywołaniem bbcode_code() - bo w niej umieściłbymreturn str_replace('<br />', "\r\n", $stri[0]);;)

ok, dzięki wam, teraz wszystko działa poprawnie ;]

--- TEMAT DO ZAMKNIĘCIA ---

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.