Autor Zpráva
laijk
Profil
Ahojte, mám na webe možnosť pridávanie bb kódov, <b>, <i> idú v poriadku, ale keď chcem niečo podčiarknúť tak mi podčiarkne od toho slova všetko až dokonca stránky, a za tým slovom napíše tag </u>
- vyzerá to tak ako keby som mal niekde na konci stránky navyše tag </u>, ale nieje, lebo mi to robí iba keď premením ten tag z bb kódov, ešte som skúsil zmazať všetky tagy <u> a </u>, ale aj tak to robí, neviem kdeby mohla byť chyba, môj kód na premieňanie na tagy:
$bb = array("", "", "[u]", "[/u]", "", ""); // [b] a [i] tu nekukázalo neviem prečo
                $html = array("<b>", "</b>", "<u>", "</u>", "<i>", "</i>");
                $zalomenyclanok = str_ireplace($bb, $html, $zalomenyclanok);
EDIT: niekedy mi to robí iba ak tam mám nejakú diakritiku, niekedy aj bez nej, ale keď tam sú ostatné tagy
Darker
Profil
Co takhle?
$text = "Pokus <b>tucne</b>, <i>kurziva</i> a <u>podtrzene</u>";
$allowed = array("b","u","i");
$allowed = implode("|",$allowed);
$nahrazeny = preg_replace("~<($allowed)[^>]*>(.*?)</\\1>~i","[$1]$2[/$1]",$text);
echo $text.PHP_EOL."<br>\n".$nahrazeny;
Pokus tucne, kurziva a podtrzene
Pokus [ b ]tucne[ /b ], [ i ]kurziva[ /i ] a [ u ]podtrzene[ /u ]

Na podobné věci doporučuji tzv. regulární výrazy - těmi se nahrazují (hledají, porovnávají) nepřesně zadané řetězce.
Může se hodit:
Regulární výrazy - shrnutí syntaxe
Zkoušečka reg. výrazů
laijk
Profil
Darker:
To čo si napísal ide, ale ja mám v tej premennej $text nie html tagy, ale bb kody ([u]nieco[/u]), a tie potrebujem premeniť na tagy
Darker
Profil
Jasně, tak potom opačně:
preg_replace("~\[($allowed)\](.*?)\[/\\1\]~i","<$1>$2</$1>",$text);
Pozor na escapování hranatých závorek - hranatá závorka v reg. výrazu má význam seznamu znaků.
laijk
Profil
Darker:
toto ide, lenže ja mám nejaký probém s tým <u>, v DB je všetko tak ako má byť takže problém bude pri tom výpise, keď som to teraz vypísal podľa tvojho preg_replace tak mi vypísalo tučné(tučným), šikmé(šikmým) a [u]podčiarknuté[/u ] - to podčiarknuté presne ako som tu napísal, s tými hranatýmy zátvorkami (a aj s tou medzerou), v DB to je dobre, ja to vypisujem z DB

ešte raz ten kód:
$allowed = array("b","u","i");
$allowed = implode("|",$allowed);
$nahrazeny = preg_replace("~\[($allowed)\](.*?)\[/\\1\]~i","<$1>$2</$1>",$text);
echo $nahrazeny;
Darker
Profil
laijk:
v DB to je dobre, ja to vypisujem z DB
Mě kód funguje jak má, chyba je ve skriptu nad ním, pokud tedy doopravdy není v DB.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: