PDA

Pogčedajte punu verziju : ukloniti br tag i ramazak, tab, novi red sa kraja stringa.


mb_sa
08. 10. 2009., 12:10
Zdravo!

Imam tekst zapisan u sljedećem obliku:

$str = 'Neki tekst<br /><br />još malo teksta<br /><br />

<br /><br />



<br /><br />

';

Ono sto meni treba je: $str = 'Neki tekst<br /><br />još malo teksta';

Sa preg_replace('{(<br(\s*/)?>)+$}i', '', $str) uspijem da skinem sve br tagove sa kraja, ali samo ako izmedju njih nema razamaka, novih redova i slicno.

Imali li neko ideju kako da dobijem rezultirajuci string. Rješenje ne mora da bude čisto regular expression, već i PHP može uskočiti u pomoć.

Pozdrav.

dinke
08. 10. 2009., 13:23
$rexexp = "/(\s*<br \/><br \/>\s+)*$/";

$str = preg_replace($rexexp, "", $str);
echo $str;

mb_sa
08. 10. 2009., 13:35
$rexexp = "/(\s*<br \/><br \/>\s+)*$/";

$str = preg_replace($rexexp, "", $str);
echo $str;


Izbirse i sav tekst.

Koliko vidim, nisam najbolje objasnio.

Redoslijed i broj <br> tagova, razamaka, novih redova ... nema nekog pravila. Dakle, moze biti samo jedan br tag, moze ih biti 15, novih redova koliko hoces, razamaci mogu biti izmedju br tagova, a i ne moraju.

Dakle, imam string koji moze na KRAJU imati hrpu br tagova (samo taj tag je pristuan) i ostalog "smeca" (u vidu razamak, novih redova ...), a meni je potreban isti taj string koji na kraju nema nista.

holodoc
08. 10. 2009., 14:06
Zdravo!

Imam tekst zapisan u sljedećem obliku:

$str = 'Neki tekst<br /><br />još malo teksta<br /><br />

<br /><br />



<br /><br />

';

Ono sto meni treba je: $str = 'Neki tekst<br /><br />još malo teksta';

Sa preg_replace('{(<br(\s*/)?>)+$}i', '', $str) uspijem da skinem sve br tagove sa kraja, ali samo ako izmedju njih nema razamaka, novih redova i slicno.

Imali li neko ideju kako da dobijem rezultirajuci string. Rješenje ne mora da bude čisto regular expression, već i PHP može uskočiti u pomoć.

Pozdrav.
Pošto se <br/> očigledno koristi za formatiranje izgleda sadržaja (što samo po sebi nije dobra ideja) a format sadržaja stringa deluje poprilično promenjljivo (nije zagarantovano da li će biti razmaka između i kako će biti raspoređeni <br />-ovi) regularnim izrazima bi se ovde poprilično teško postigli neki rezultati. Postoje po meni dve opcije:

1) Korišćenje DOMDocumet (http://us3.php.net/manual/en/class.domdocument.php)-a u kombinaciji sa DOMXPath (http://us3.php.net/manual/en/class.domxpath.php)-om za selekciju i manipulaciju ovakvim tipom sadržaja. Prednosti, mnogo veći stepen kontrole nad XHTML sadržajem koje regularni izrazi ne mogu često da postignu. Klasa specijalno pisana za ovakve potrebe. Mana, potrebna je zasebno instalirana ekstenzija (xml) koja obezbeđuje ove funkcionalnosti.

2) Klasičan dobri stari PHP bez regularnih izraza uz malo korišćenja mašte :) Prednosti, brzo i svuda primenjljivo i to bez korišćenja regularnih izraza. Nedostaci, format stringa ne sme da se menja. Evo primera:
<?php
$str = 'Neki tekst<br /><br />još malo teksta<br /><br />

<br /><br />



<br /><br />

';
if($brPos = strpos($str, '<br /><br />')){ //pozicija prve pojave '<br /><br />' u stringu
$clean = trim(strip_tags($str)); //ciscenje od HTML tagova i 'belih' znakova sa krajeva
$out = substr_replace($clean, '<br /><br />', $brPos, 0); //'montirani' izlazni string
} else {
exit('Format stringa ne odgovara!');
}
echo $out;
?>
Moja preporuka je ipak da se podaci potpuno odvoje od načina na koji se prezentuju i da se koristi CSS za definisanje paragrafa, preloma linija itd.

MorenoArdohain
08. 10. 2009., 14:16
Zar ne moze nesto kao:

$rexexp = "/(<br \/>|\s)*$/";


To brise sve <br /> i whitespaces na kraju stringa.

mb_sa
08. 10. 2009., 14:25
Zar ne moze nesto kao:

$rexexp = "/(<br \/>|\s)*$/";


To brise sve <br /> i whitespaces na kraju stringa.

Bravo! Rješenje prolbema.

Hvala svima na ucescu i pomoci!