Pogčedajte punu verziju : Uklanjanje br tagova izmedju pre tagova
Bojsi
22. 04. 2008., 17:17
Ljudi pomagajte :)
Pokusavam vec neko vreme (stalno se vracam na problem), ali nikako ne mogu da uz pomoc recimo preq_replace da obrisem br tagove izmedju 2 ugnjezdena taga. Br tag mi pravi probleme prilikom formatiranja teksta koji je vec preformatiran i pre tag ga tako pokazuje.
Ja najpre obradim citav tekst sa nl2br koji stvori te dodatne br tagove.
Hvala na svakoj pomoci.
Bojsi
22. 04. 2008., 17:59
Pomoglo bi mi takodje kada bih i znao kako da parsiram /n ali samo kada nije unuter "[code]" blokova.
ivanhoe
22. 04. 2008., 18:53
define('ZAMENA_ZA_NL', '~\n~'); // ovde naravno moze da se stavi i npr. {{n}} ili vec nesto sto tebi odgovara
// sakrijes \n unutar <PRE>...</PRE> dela
$out = preg_replace_callback('|<pre>.+?</pre>|',
create_function( '$matches', 'return strtr( $matches[0], array("\n"=>ZAMENA_ZA_NL));',
$input);
//zamenis \n sa <br>
$out = nl2br($out);
// vratis \n
$out = strtr( array(ZAMENA_ZA_NL=>"\n");
ovo kucam iz glave, pa mozda ima nekih greskica, ali to ti je ideja kako da resis... a isto tako mozes i za [code] blok i ostalo..
Bojsi
22. 04. 2008., 19:12
Hvala Ivanhoe jos jednom,
Ali ne ide mi od ruke da mi proradi tvoj primer:
<?php
$input = '
ovo
je
tekst
abc
<pre>
var
x: Integer;
begin
x := 10;
end;
</pre>
';
define('ZAMENA_ZA_NL', '~\n~');
// sakrijes \n unutar <PRE>...</PRE> dela
$out = preg_replace_callback('|<pre>.+?</pre>|', create_function('$matches', 'return strtr($out, array("\n"=>ZAMENA_ZA_NL));'), $input);
//zamenis \n sa <br>
$out = nl2br($out);
// vratis \n
$out = strtr($out, array(ZAMENA_ZA_NL => "\n"));
echo $out;
?>
Prepravio sam par stvari za koje je interpreter javljao gresku, pa se nadam da nisam nesto pokvario.
Ako ovo moze nekako da se resi, spasli bi mi dan.
Hvala i pozdrav
Bojsi
22. 04. 2008., 19:28
Malo sam doradio i uprostio i sve sto mi treba je da svaki nadjeni /n zameni sa & nbsp
<?php
$input = '
ovo
je
tekst
abc
<pre>
var
x: Integer;
begin
x := 10;
end;
</pre>
';
function zamene($matches)
{
return strtr($matches, array("\n" => " "));
}
$out = preg_replace_callback('|\<pre\>(.+?)\<\/pre\>|', 'zamene', $input);
echo $out;
?>
Sad da li sam napravio neku ociglednu gdesku, uh ne znam vise :)
Bojsi
22. 04. 2008., 20:43
Evo da probam sa necim jako prostim. Izvinjavam se unapred, vise ni u sta nisam siguran :(
echo preg_replace('|<pre>[beli]</pre>|', 'crni', 'beli mrav i <pre> jedan beli slon </pre>');
Imamo dakle ovu recenicu gde bih zeleo da "beli" pored slona zamenim u "crni", dakle izmedju 2 "pre" taga.
Nadam se da je ovo sustina svega.
ivanhoe
22. 04. 2008., 23:34
Ja sam zeznuo par stvari, a ti ih posle nisi dobro popravio. Evo ovaj kod radi:
<?php
$input = '
ovo
je
tekst
abc
<pre>
var
x: Integer;
begin
x := 10;
end;
</pre>
';
define('ZAMENA_ZA_NL', '~\n~'); // ovde naravno moze da se stavi i npr. {{n}} ili vec nesto sto tebi odgovara
// sakrijes \n unutar <PRE>...</PRE> dela
$out = preg_replace_callback('|<pre>.+?</pre>|si',
create_function('$matches', 'return str_replace("\n", ZAMENA_ZA_NL, $matches[0]);'),
$input);
//zamenis \n sa <br>
$out = nl2br($out);
// vratis \n
$out = str_replace(ZAMENA_ZA_NL, "\n", $out);
echo $out;
?>
Ako ovo pokreces na windowsu onda tamo gde pise "\n" moras da zamenis da bude "\r\n" (windows new line)
EDIT: Ako hoces da ovo isto uradis za [code] blok onda ti je regExp ovakav: '|\[code\].+?\[/code\]|si'
Bojsi
23. 04. 2008., 00:04
Hvala najlepse,
To je to :)
Problem mi je i pravio \r\n koji se razlikuje od \n na unixu :)
Pola interneta sam pretrazio zbog ovoga. Ukoliko ti je potrebna neka pomoc oko dizajna, samo javi!
Pozdrav
ivanhoe
23. 04. 2008., 04:33
nema frke..
i mene je zbunilo to sa windows new line-om, posto se dobije mnogo cudan rezultat, fali pola teksta.. a u stvari kad uklonis \n onda ostane samo \r koji uradi return na pocetak reda (bez prelaska u novu liniju) i onda pojede prethodni tekst..
Bojsi
25. 04. 2008., 14:26
Mnogo si mi pomogao. Mogu ti pokazati kasnije sta sam sve uspeo da uradim za ovih nekoliko dana, ako zelis :)
Bojsi
26. 04. 2008., 22:29
Evo sta sam uspeo da uradim :)
http://dn.bergsoft.net/
Nazalost, i dalje nije 100% kompatibilan sa IE i ima gresaka, ali moze da se koristi.
vBulletin® v3.6.8, Copyright ©2000-2009, Jelsoft Enterprises Ltd.