Autor Zpráva
vasek125
Profil *
Jak zařídít, aby se na koncích řádků doplňovalo <br />, ale vždy mimo tag pre
fimmos
Profil
Napsat si na to regulérní výraz...
WanTo
Profil
Řetězec bych rozdělil na několik podřetězců. A) ty, které začínají <pre> a končí </pre> B) zbylé řetězce mezi těmi typu A. V řetězcích typu B bych zavolal nl2br() a pak bych všechny části spojil nazpátek do jednoho celku.
vasek125
Profil *
To už jsem zkoušel, ale nějak se mi to nevedlo, ještě v tom nejsem tak sběhlý. Já to dělal tak, že se to br přidá všude a uvnitř pre se vymaže, ale nějak se mi to nedařilo.
WanTo
Profil
uvnitř pre se vymaže
Tím se ztratí formátování textu.
vasek125
Profil *
No to jsem si předtím neuvědomil, teď už vim, že je to blbost. Já jsem jenom myslel, jestli by nešlo doplňovat to br pomocí preg_replace tak, že se při každém doplňování zkontroluje, jestli to není v tagu pre, nemůžete mi s tím prosim pomoct?
WanTo
Profil
Tak tady máš hotovou funkci. Určitě půjde nějak vylepšit, ale když jsem jí testoval na konzoli (pomocí příkazu php), zdálo se, že funguje výborně:


<?
function nl2br_except_pre($text) {
$newtext; //nový text
$part; //část textu, který ještě nebyl nahrazen

$pre = true; //true = hledat pre, false = hledat </pre>

$part = $text;

while(true) {
$pos = strPos($part, $pre ? "<pre>" : "</pre>");
if($pos == false) {
$end = true;
$pos = strLen($part);
}

//nahradit od začátku $part až do $pos
if($pre) {
$repl = nl2br(subStr($part, 0, $pos));
}
else {
$repl = subStr($part, 0, $pos);
}
$newtext .= $repl;
$pre = !$pre;

$part = subStr($part, $pos, strLen($part) - $pos);

if($end) {
break;
}
}


return $newtext;
}


$text = "nahrazuj\nnove<pre>radky\nne v pre</pre>\n ale\nza pre taky.";
echo "Nenahrazeno: " . $text . "\n";
echo "Nahrazeno: " . nl2br_except_pre($text) . "\n";
?>
vasek125
Profil *
JJ, funguje perfektně, děkuji mnohokrát, toto bych nesestavil ani kdybych u toho seděl týden.
Toto téma je uzamčeno. Odpověď nelze zaslat.