SyntaxHighlighter и bbcode проблем

kikity_94

Registered
Здравейте,
Използвам SyntaxHighlighterа на alexgorbatchev и съмн си го интегрирал с моя bbcode функция.
Проблема идва, че примерно като добавя някакъф php код между таговете и там работи highlightera то на всеки ред добавя по едно <br> и не мога да разбера как да го премахна.
Текстареата в която се пише кодът я минавам през htmlspecialchars, addslashes а когато има нещо между таговете минавам през htmlspecialchars_decode, stripslashes
 
Така викаш функцията за премахване на <br /> и премахваш тага само между [*code][*/code] .
PHP:
function br2nl($matches)
	{        
		//Премахване на <br /> в таговете <pre>.
		$text = preg_replace("/\<br \/\>/","",$matches[1]); 
return $text;
	}
	//Викане на функцията br2nl.
	$text = preg_replace_callback("/\[code\](.+?)\[\/code\]/is","br2nl",$text);
 
Дака той явно го слага в <pre> тагове... а твоя код прави целия код на един ред....

@kikity_94 сложи го в <code></code> таг
 
dakata__92 каза:
PHP:
function br2nl($matches)
	{        
		//Премахване на <br /> в таговете <pre>.
		$text = preg_replace("/\<br \/\>/","",$matches[1]); 
return '<pre>'.$text.'</pre>';
	}
	//Викане на функцията br2nl.
	$text = preg_replace_callback("/\[code\](.+?)\[\/code\]/is","br2nl",$text);

Не вярвам да е толкова сложно да ретърнеш вече с пре таг !
 
не искам да ползвам preg_replace_callback
bbcoda ми е по този начин
PHP:
$bbcode = preg_replace("/\[code\](.+?)\[\/code\]/is", "<pre class='brush: php;'>$1</pre>", $bbcode);
точно тук искам да премахна <br>
 
Да де хора....

PHP:
$bbcode = preg_replace("/\[code\](.+?)\[\/code\]/is", "<code class='brush: php;'>$1</code>", $bbcode);

Ето погледни как е при мене http://plamba.no-ip.org/bbcode-v2/ (системата е моя :P)
 
kikity_94 каза:
не искам да ползвам preg_replace_callback
bbcoda ми е по този начин
PHP:
$bbcode = preg_replace("/\[code\](.+?)\[\/code\]/is", "<pre class='brush: php;'>$1</pre>", $bbcode);
точно тук искам да премахна <br>

Няма как да стане по друг начин освен с callback :

PHP:
function br2nl($matches)       
 {                       
 //Премахване на <br /> в таговете <pre>.               
 $bbcode= preg_replace("/\<br \/\>/","",$matches[1]); 
return "<pre class='brush: php;'>".$bbcode."</pre>";       
 }        
//Викане на функцията br2nl.        
$bbcode= preg_replace_callback("/\[code\](.+?)\[\/code\]/is","br2nl",$bbcode);
 
Абе Дака виж кво казвам аз бе... Праил съм оная система сам и знам как да се справя с това... с твоя код... всичко ще е на един ред...
 
IzKuFeLiQqQqQ каза:
Абе Дака виж кво казвам аз бе... Праил съм оная система сам и знам как да се справя с това... с твоя код... всичко ще е на един ред...
При pre class prettyprint да чукнем бас, че няма да е на 1 ред :D А той щом желае да премахва <br /> таговете значи явно има нужда .
 
IzKuFeLiQqQqQ каза:
Да де хора....

PHP:
$bbcode = preg_replace("/\[code\](.+?)\[\/code\]/is", "<code class='brush: php;'>$1</code>", $bbcode);

Ето погледни как е при мене http://plamba.no-ip.org/bbcode-v2/ (системата е моя :P)

Знам, че е твоя а аз използвам именно нея с малката разлика, че php кода е мой :)

dakata__92 каза:
kikity_94 каза:
не искам да ползвам preg_replace_callback
bbcoda ми е по този начин
PHP:
$bbcode = preg_replace("/\[code\](.+?)\[\/code\]/is", "<pre class='brush: php;'>$1</pre>", $bbcode);
точно тук искам да премахна <br>

Няма как да стане по друг начин освен с callback :

PHP:
function br2nl($matches)       
 {                       
 //Премахване на <br /> в таговете <pre>.               
 $bbcode= preg_replace("/\<br \/\>/","",$matches[1]); 
return "<pre class='brush: php;'>".$bbcode."</pre>";       
 }        
//Викане на функцията br2nl.        
$bbcode= preg_replace_callback("/\[code\](.+?)\[\/code\]/is","br2nl",$bbcode);

Дака няма как да го направя по този начин тъй като аз използвам вече функция

PHP:
function bbcode($bbcode) {
		$bbcode = htmlspecialchars_decode(stripslashes($bbcode));
		$bbcode = preg_replace("/\[b\](.+?)\[\/b\]/is", "<b>$1</b>", $bbcode);
$bbcode = preg_replace("/\[code\](.+?)\[\/code\]/is", "<pre class='brush: php;'>$1</pre>", $bbcode);
}

Имам и други реплейсове и искам във функцията да го направя това нещо
 
Нищо не ти пречи да поставиш функция във функция или още вложена функция :)
PHP:
function bbcode($bbcode) {
$bbcode = htmlspecialchars_decode(stripslashes($bbcode));
$bbcode = preg_replace("/\[b\](.+?)\[\/b\]/is", "<b>$1</b>", $bbcode);
function br2nl($matches)       
 {                       
 //Премахване на <br /> в таговете <pre>.               
 $bbcode= preg_replace("/\<br \/\>/","",$matches[1]); 
return "<pre class='brush: php;'>".$bbcode."</pre>";       
 }        
//Викане на функцията br2nl.        
$bbcode= preg_replace_callback("/\[code\](.+?)\[\/code\]/is","br2nl",$bbcode);

}
 
<pre> Тага добавя допълнителен <br /> и аз незнам защо... <code> е доста по-добре от <pre>!! С <code> няма да имаш проблеми...

И човек замисли се... махаш всички <br />-та и пак имало нови редове... да бе... Най-малкото че всеки програмист си има начин на писане и тоя клас нищо не може да направи по случея...


@kiki Пробвай по 2-та начина ако не те мързи и кажи къв е резултата :)
 
IzKuFeLiQqQqQ каза:
<pre> Тага добавя допълнителен <br /> и аз незнам защо... <code> е доста по-добре от <pre>!! С <code> няма да имаш проблеми...

И човек замисли се... махаш всички <br />-та и пак имало нови редове... да бе... Най-малкото че всеки програмист си има начин на писане и тоя клас нищо не може да направи по случея...


@kiki Пробвай по 2-та начина ако не те мързи и кажи къв е резултата :)
При <pre class="prettyprint">$bbcode</pre>
Който ползва и туриста ако не премахнеш <br /> таговете текста се раздува двойно на всеки празен добавен ред в textarea ! За случая на автора той иска да ги премахне и му показвам как ! Щом е сметнал, че са ненужни той по-добре от нас знае :D
 
В моя случай няма празни редове, или не сте разбрали правилно или аз не съм обяснил както трябва. Ето нагледно какво точно е
5113770z.png

Кодът добавен в текстареата изглежда така
PHP:
<?php
$string = "string";
?>

И няма как да променя <pre> с <code> или каквото и да е било тъй като не ползвам мой highlighter а този готовия на Горбачев ли къв беше :D
 
IzKuFeLiQqQqQ каза:
Аз също съм с тоя скрипт бе... и ти казвам, че с <code> е по-добре отколкото с <pre>

Добре като е по-добре как аджаба да променя това
<pre class='brush: php;'>$1</pre>
да стане така
<code class='brush: php;'>$1</code>
Защото съм убеден, че тр са оправя нещо и в останалите файлове на highlightera, а останалите файлове са основно JS/Jquery а там съм пълна боза :D
 
kikity_94 каза:
IzKuFeLiQqQqQ каза:
Аз също съм с тоя скрипт бе... и ти казвам, че с <code> е по-добре отколкото с <pre>

Добре като е по-добре как аджаба да променя това
<pre class='brush: php;'>$1</pre>
да стане така
<code class='brush: php;'>$1</code>
Защото съм убеден, че тр са оправя нещо и в останалите файлове на highlightera, а останалите файлове са основно JS/Jquery а там съм пълна боза :D
Изобщо пробва ли функцията която ти дадох ?
 
dakata__92 каза:
kikity_94 каза:
IzKuFeLiQqQqQ каза:
Аз също съм с тоя скрипт бе... и ти казвам, че с <code> е по-добре отколкото с <pre>

Добре като е по-добре как аджаба да променя това
<pre class='brush: php;'>$1</pre>
да стане така
<code class='brush: php;'>$1</code>
Защото съм убеден, че тр са оправя нещо и в останалите файлове на highlightera, а останалите файлове са основно JS/Jquery а там съм пълна боза :D
Изобщо пробва ли функцията която ти дадох ?

Пробвах я да, но не знам защо без резултат. Ще се пробвам пак да направя нещо, но не знам дали ще успея
 
Ако не се е получило пробвай така :
PHP:
function bbcode($bbcode) {
 $bbcode = htmlspecialchars_decode(stripslashes($bbcode));
 $bbcode = preg_replace("/\[b\](.+?)\[\/b\]/is", "<b>$1</b>", $bbcode);
function br2nl($matches)       
 {                       
 //Премахване на <br /> в таговете <pre>.               
 $bbcode= preg_replace("/\<br\>/","",$matches[1]); 
return "<pre class='brush: php;'>".$bbcode."</pre>";       
 }        
//Викане на функцията br2nl.        
$bbcode= preg_replace_callback("/\[code\](.+?)\[\/code\]/is","br2nl",$bbcode);

}
Във функцията по-горе която ти дадох заменяше <br /> тага, а в тази само <br> тага заменяш :)
 
Момчета оправих се. Грешката е била изцялов мене :D
Просто след всички реплейсове съм направил следното
echo nl2br($bbcode);
много съм тъп нали :D
премахнах nl2br и всичко се оправи :)
 

Back
Горе