

PHP - jak zpracovat znaky
Potřebuji poradit jak převést znaky.
Dejme tomu, že mám řetězec:
<p>hokus<span style="background-color: rgb(255, 0, 0);"> pokus </span>dva</p>
<p>
A potřebuji jej převést zpět na tento řetězec:
<p>hokus<span style="background-color: rgb(255, 0, 0);"> pokus </span>dva</p>
<p>text</p>
To co mě v první chvíli napadlo s funkcí str_replace však poněkud nefunguje:
$body = "<p>hokus<span style="background-color: rgb(255, 0, 0);"> pokus </span>dva</p>
<p>";
$body = str_replace ($body,"<" , "<");
$body = str_replace ($body,">" , ">");
K nahrazeni a naslednemu vypsani nelze uvazovany postup pouzit.
Potrebuji vedet, jak elegantne z toho ven.
Postup, ktery mě napadá je to snad rozdělit do menších částí (do pole) a to jednotlivě zpracovávat, což
je určitě hodně nefektivní a dnes bych to už ani nevymyslel.
Díky
Já nejsem PHPista, ale mám
a to mi funguje dobře. Co u toho tvého dát to $body také nakonec a bez mezer?
Právě jsem to zjistil sám.
Ano, takže děkuji za odpověď. Zaměnil jsem tam ty argumenty.![]:(](https://static.poradna.net/images/smiley/evilworry.gif)
Slibuju, že příští čtyři dny už budu pravidelně spát.
EDITACE
Ajaj zjistil jsem velice nepříjemnou věc. Háže to paznaky i při českých znacích.
Neexistuje na to univerzální funkce, která by i české znaky s diakritikou převáděla ?
Takto staticky to nemám šanci všechno ošetřit.
O co sa to vlastne snazis? Co ta vedie k tomu prevadzat tie entity na znaky?
Já mám třeba "komentáře" a ty se před uložením do db (vlastně už v náhledu) převádějí z < na entity. A když chce někdo komentář upravit už po uložení, načte se mu to do okna bez entit.
To ze pred ulozenim dat do DB sa prevedu na entity je zamer??? lebo mi tam trosku unika zmysel ... ja by som do DB urcite nedaval entity ...
no a dalsia vec, entity sa predsa automaticky prevadzaju na normalne znaky ... vsak entita je len kod znaku a ked vypises entitu, tak sa vypise znak
Ano, je to záměr. Kdyby někdo napsal do komentáře
(jsem jako lstivý Afghánec)
<div style="width: 100%; height: 100%; background-color: black; color: red">
hacked by debil
</div>
uloží se to do db s entitami a při načtení z db ty tagy fungovat nebudou, jelikož se načtou jako text.
asi
možná
snad
kéž by
Proč tady děláte odpovědi s jedním slovem sám sobě? (LaKr) (Kráťa)
Ale ved prave na to sa zvykne text pred vypisom konvertovat na entity
htmlspecialchars() ..... a dam krk na to, ze ti z DB vypise presne to co tam zadas a nebude to chapat ako html kod ale ako text
Však jsem psal, že PHP není právě můj talíř. I když tuto funkci jsem už také někam dával. Ale dotaz je jak převést text, ne co a jak uložit/načíst z/do db.
Často sa zvykne v databáze ukladať HTML-zakódovaný text kvôli tomu, aby ho nebolo treba pri každom výpise formátovať.
K pôvodnej otázke: Môžeš použiť napr. html_entity_decode alebo v lepšom prípade nejakú vlastnú funkciu (prípadne v komentároch na tom odkaze sú už nejaké funkcie napísané).
Ano na to jsem přišel a funguje to... ale jenom částečně. konkrétně mám tento problém:
Řekněme tento řetězec:
A ten se mi potvora převede po průchodu tou fcí na toto(jo to <p> neřeš):
A po aplikování funkce:
Vyleze:
...což znamená, že pro unkodování speciálních znaků jako $ ™ ® je to OK, ale s češtinou to má problém.
Nebyla by rada nebo nápad ?
//EDIT
AHÁÁÁ !
To mrcha. Ono to totiž neprovadí konverzi stejně.
Co tím myslím ? Ten text generuje FCKEditor a ta mrcha se tváří následně:
stisknutím kláves následujících:
+ěščřžýáíéů
vyleze:
+ěščř žýáíéů
Což znamená, že ten editor některé znaky konvertuje, ale některé ne....
Co to znamená si ještě musím promyslet...
Jo takže znamená to, že ta funkce přebírá některé znaky a konvertuje, které by měnit neměla.
Takže například písmeno č konvertuje na : ÄŤ
Jde to nějak obejít ?