nl2br премахване между таг

dakata__92

Super Moderator
Как да премахна само <br /> подаден от nl2br между таговете [\code]ТУК[\code] без да навредя на останалия текст подаден вече с нов ред <br />

Код:
$text = preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black"><pre class="prettyprint">$1</pre></td></tr></table>',$text); 
	
$text = nl2br($text);
return stripslashes($text);
 
Защо не работи с горния код :( Как да извикам тази функция при $1 на тага code :)
Код:
function my_nl2br($text)
{
	$text = str_replace("<br />","", $text);
	return ($text);
}
 
Никой ли няма представа как да извикам функцията поне ? Пробвах с
preg_replace_callback(); и извиках функцията, ноо не се получава явно трялбва да е в code /code таговете извикана при реплейса и то да важи само за $1 извикана от регулярния израз :( Как да я извикам, че да работи само за там :cry:
 
Защото, не използвам само този текст, и не вадя само при реплейс на code ! Знам, че е в <pre>$1</pre> и точно поради тази причина искам да извикам функцията за да премахна <br /> подаден от nl2br .
Имам и други реплейс регулярни изрази и не искам да важи и за тях, а само за code:
$text = preg_replace("/\[b\](.+?)\[\/b\]/is", '<b>$1</b>', $text);
 
$text = nl2br($text);

$text = preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black"><pre class="prettyprint">$1</pre></td></tr></table>',$text);

в този ред, и после $1 го заместваш с str_replace("<br />","", $1);

:roll:
 
Така не работи, а и приема $1 за ерор . Явно не схванах какво имаш предвид :?
$text = nl2br($text); //преобразува всички празни редове до <br />
$text = preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black"><pre class="prettyprint">'.str_replace("<br />","", $1).'</pre></td></tr></table>',$text);
 
dakata__92 каза:
Та икой ли си няма на представа как ще стане :(
От обясненията ти, ако съм разбрал правилно искаш само в съдържанието на pre tags да няма тагове за нов ред:

PHP:
//дрън дрън
$text = preg_replace("/\[code](.+?)\[\/code]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black"><pre class="prettyprint">$1</pre></td></tr></table>',$text);
$text = nl2br($text);
$text = preg_replace('/(?<!<pre class="prettyprint">)<br \/>(?!<\/pre>)/','',$text);
//дрън дрън
 
Хмм дам няма да стане с негативни look-ahead и look-behind.
Така би трябвало да стане:

PHP:
function yeah($ts) {
	$ts = preg_replace('/<br \/>/','',$ts[0]);
	return $ts;
}
//дрън дрън
$text = preg_replace("/\[code](.+?)\[\/code]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black"><pre class="prettyprint">$1</pre></td></tr></table>',$text);
$text = nl2br($text);
$text = preg_replace_callback('/(?<=<pre class="prettyprint">).+?(?=<\/pre>)/s','yeah',$text);
//дрън дрън та пляс
 

Back
Горе