Autor Zpráva
Petr Fores
Profil *
Dobrý den,

Mám problém s náhradou výrazů v textu. Výrazy samy o sobě jsou "jen" textem, tedy např. Dobra Voda. V textu je ale použito formátování, tedy stejný výraz je zde jako např. <i>Dobra <b>Voda</b></i> nebo <font size="+1">Dobra <u>Voda</u></font>. Když použiji fci str_replace($puvodni, $nahrada, $text), tak to nefunguje. Jedine co me napadlo, bylo pouziti strip_tags(), tedy v zapisu: str_replace($puvodni, $nahrada, strip_tags($text)), což sice funguje, ale ztratím formátování, což je problém.....nevíte někdo, jak tohle řešit?

Script vypada takto:

$nahrada = "<a href="url">Dobra Voda</a>";
$puvodni = "Dobra Voda";

$nahrad = str_replace($puvodni, $nahrada, strip_tags($text));

Problem je, ze ale ztratim formatovani v celem textu coz je spatne a kdyz nepouziji strip_tags(), tak se mi vyraz v textu nenajde...

Petr.
nightfish
Profil
Petr Fores
proč by to nemělo fungovat ve verze bez strip_tags? snad jediný problém, který mě napadá, je to, že máte <i>aeiou</i> a chcete "i" nahradit za "d", pak to logicky vezme i v tagu
ale to by mělo jít ošéfovat regulárními výrazy
Petr Fores
Profil *
Zkuste si to.....me to tedy nemeni:

$text = "<i>Dobra <b>Voda</b></i>";
$nahrada = "<a href=url>Dobra Voda</a>";
$puvodni = "Dobra Voda";

echo str_replace($puvodni, $nahrada, $text);
Pavel Strejček
Profil
Chyba je v tom, že chceš nahradit "Dobra Voda", ale v textu máš "Dobra <b>Voda".
Pavel Strejček
Profil
Ale to si asi nechtěl slyšet, takže spíš viz ty regulární výrazy. Mělo by to jít pomocí preg_replace(), ale regulární výraz bude dost komplikovaný. Chtělo by to vymezit všechny případy které mohou v tom kódu nastat.
Pavel Strejček
Profil
případně preg_replace_callback()
Toto téma je uzamčeno. Odpověď nelze zaslat.