http://www.mazlo.org - Osobní stránky Jiřího Zamazala  

Využití funkce Str_Replace() v PHP

Jsou to již dva měsíce, co jsem napsal něco málo o zabezpečení vstupních formulářů v PHP. Ke konci článku jsem přislíbil, že bude mít pokračování, tak tady ho máte :D.

Povolení některých html tagů

Předtsavte si, že máte návštevní knihu, forum a nebo třeba komentáře, kde ostatní píší své náměty, připomínky atd. A někdy je potřeba něco zvýraznit či oddělit. Na druhou stranu zas nechcete povolit všechny HTML tagy. Návod je prostý ;)

Ve vstupním formuláři (třeba i za pomocí JavaScriptu) návštěníka informujete, že [B]něco[/B] znamená <b>něco</b>, tedy vlastně <strong>něco</strong>, pokud má mít zvýrazněný text sémantický význam ;)

Dejme tomu, že máte proměnnou $text, ve které je uložen příspěvek. Pak stačí do scriptu vložit:

$text = Str_Replace("[B]","<strong>",$text);
$text = Str_Replace("[/B]","</strong>",$text);

Stejně tak můžeme pokračovat ve stejném duchu ...

$text = Str_Replace("[I]","<em>",$text);
$text = Str_Replace("[/I]","</em>",$text);

Poznámka pro lamery: Najděte si místo ve zdrojáku, kde je vložení příspěvku do databáze a tento "kód" vložte před to. Vycházíme z předpokladu, že příspěvek je v proměnné $text!

Jinak myslím, že je jasné, jak funkce Str_Replace funguje ;) Vyhledá v proměnné řetězec znaků a ten nahradí jiným řetězcem znaků.

Smajlíci pomocí Str_Replace

Funkce Str_Replace se samozřejmě dá využít i na jiné věci, třeba na převod textového smajlíku na grafický smajlík (obrázek) ;)

$text = Str_Replace(":)"," <img src=\"smiles/smajlik.gif\" alt=\":)\"/>",$text);

Převedení & na &amp;

Pokud máte validní web, jistě Vás naštve, když uživatel do formuláře návštěvní hnihy napíše &, protože Vám vznikne nevalidní web ;-)

$text = Str_Replace("&","&amp;",$text);

Nový řádek

Chcete, aby, když uživatel stiskne enter při psaní ve formuláři, se v příspěvku vložil nový řádek? Není problém ... ;)

$text = Str_Replace("\n","<br />",$text);

Zakázání html tagů

Pomocí funkce Str_Replace můžeme zakázat všechny html tagy:

$text = Str_Replace("<","&lt;",$text);
$text = Str_Replace(">","&gt;",$text);

Varování

Chci Vás předem varovat na jeden problém, na který jsem narazil ;-)
Pokus budete chtít použít všechny příklady, které jsem zde uvedl, musíte si dát pozor na pořadí! Představte si, že by bylo nejdříve převedení HTML tagů na HTML entity. Ze zápisu <tag> by vzniklo &lt;tag&gt;. Pokud byste za tuto funkci dali funkci na Převedení & na &amp;, udělala by vám z toho pěknou paseku ;) To mi věřte, vím to z vlastní zkušenosti :D :D.

Pro jistotu uvedu celý zdrojový kód ve správném pořadí. Předem se chci vyhnout debatám na ICQ :-)

$text = Str_Replace("&","&amp;",$text);
$text = Str_Replace("<","&lt;",$text); $text = Str_Replace(">","&gt;",$text); $text = Str_Replace(":)"," <img src=\"smiles/smajlik.gif\" alt=\":)\"/>",$text); $text = Str_Replace("[B]","<strong>",$text); $text = Str_Replace("[/B]","</strong>",$text); $text = Str_Replace("[I]","<em>",$text); $text = Str_Replace("[/I]","</em>",$text); $text = Str_Replace("\n","<br />",$text);

Uff, to by mělo být vše ;)

Kategorie: Web a vše kolem něj ≈ 08. 01. 2006 ≈ Počet zobrazení: 6579x

Komentáře

Napsat komentář





;) :-P :-) :D 8-) :-O :( :-X .-)

  • Povinné údaje jsou zvýrazněny tučným písmem!
  • Formátování textu:
  • Povolené typy odkazů (příklady):
    • www.mazlo.org, http://www.mazlo.org či jen http://mazlo.org
    • https://www.t-zones.cz
    • ftp.slackware.cz (není povoleno ftp://ftp....!)
    • Za odkazem dělejte vždy mezeru!
  • Enter znamená nový řádek
  • Po 45 znacích ve slově se vytvoří mezera (vyjma odkazů)
  • RSS export komentářů tohoto článku
Simon [360] -- 08. 01. 2006 00:41:24
Dobrý, ještě sehnat návod na vytvoření návštěvní knihy :D
 
 
Králik [951] -- 01. 07. 2006 11:21:36
Moc diky, moc, moc, moc mco moc ;) uz sem myslel ze na str replace seru, ale diky admine tohoto clanku :D uz mi to funguje :)
kralik (zavinac) profitux.cz | www | Reagovat
 
Králik [956] -- 02. 07. 2006 09:10:06
Návod?? LOL ja jsem lamka a www.povidky.wz.cz/guestbook jsem admin ;-)
 
nd [1315] -- 27. 11. 2006 19:55:02
:-) :D .-) :-X :( :-O 8-) :D :-) :-P ;) [b][/b]
cbnv | www | IM: cnb | Reagovat
Mazlo [361] -- 08. 01. 2006 00:47:47
Simon: Třeba se někdy dočkáš :D
Webmaster | Kontakt | Reagovat
Miloso [362] -- 08. 01. 2006 12:50:28
Moc hezký článek, ukládám do záložek, jednou se možná bude hodit :D
Acci [363] -- 08. 01. 2006 13:59:41
Nechci rýpat, ale tohle:
$text = Str_Replace("\n","<br />",$text);
lze řešit mnohem lépe:
$text = nl2br($text);

Také
$text = Str_Replace("<","&lt ;",$text);
$text = Str_Replace(">","&gt ;",$text);
lze řešit lépe:
$text = htmlspecialchars($text)
Zároveň to taky převede & na & amp;
Mazlo [364] -- 08. 01. 2006 14:09:08
to Acci:
Funkci nl2br() vidím poprvé v životě ... Díky za novou informaci :]

Jinak funkci htmlspecialchars() jsem popsal v minulém článku (viz odkaz nahoře v článku) ;)
Webmaster | Kontakt | Reagovat
peCan [365] -- 08. 01. 2006 18:28:59
priste napis o wordwrap(); a jak to cele komplet s tim co uz jsi psal pouzit, aby to zabralo co nejmin mista v databazi a nedostalo se ti tam neco, co zrovna nepostrebujem:-)
Mazlo [366] -- 08. 01. 2006 18:40:36
to peCan: o funkci wordwrap() jsem již psal :D Ale není špatné to vše shrnout dohromady :]

A ještě bych to mohl skloubit s escape sekvencema :-)
Webmaster | Kontakt | Reagovat
dr.merlin [368] -- 12. 01. 2006 22:09:58
Pracoval jsem na jedné seminární práci (v Javě), kde jsem používal podobný systém "záměny" hodnot. Docela se mi osvědčilo uložit dvojice hodnot (původní=nahrazující) do textového souboru. Má to výhodu, že jej můžete kdykoliv jednoduše editovat a nemusíte se "hrabat" v kódu. Soubor stačí potom jen načíst do kolekce (klíč=hodnota) a poté projít vkládaný text. Podobnou funkcionalita můžete vytvořit jako třídu, kterou potom lze použít na dalších projektech.
IM: 143-650-045 | Reagovat
Kašpy [370] -- 14. 01. 2006 11:46:48
Zdravim tě,
proč si nepoužil pole?

<?php
$text = str_replace($pole1,$pole2,$tex t);
?>

Myslim, že by to bylo názornější - představi si že bych rozepisoval každej tag, a ještě jedna věc tvuj příklad je case-sensitive takže pokud bych zadal [ b ] a [ /b ] tak by se nic nestalo a navíc pokud bych měl text třeba takovýto:

$text = "<i>xxxxxxxx<b>" ;

tak ti to zformátuje všechno i a pak i a b takže raději funkce preg_replace
Atlasx (zavinac) seznam.cz | www | IM: 226547822 | Reagovat
Mazlo [372] -- 14. 01. 2006 15:15:10
to dr.merlin: Souhlasím :D

to Kašpy: Díky :]

btw: Sakryš, někdy si připadám jak totální lama :-O
Webmaster | Kontakt | Reagovat
Kašpy [378] -- 15. 01. 2006 10:21:20
|btw: Sakryš, někdy si připadám jak totální lama|

Nechtěl sem tvoje dílo nějak znehodnotit jen sem poukázal na to, že to jde jinak.
Atlasx (zavinac) seznam.cz | www | IM: 226547882 | Reagovat
Mazlo [381] -- 15. 01. 2006 20:26:55
to Kašpy:
Já vím, jaks´s to myslel :D Ale stejně jsem lama :-)
Webmaster | Kontakt | Reagovat
Binduch [412] -- 23. 01. 2006 21:42:59
Podle me uplne nejlepsi je neprevadet jen \n na <br /> ale prevadet na break i odentrovani, pac by me zajimalo, kterej laik ti napise do gb '\n' A taky je potreba osetrit uvozovky...
binduch (zavinac) seznam.cz | IM: 117674592 | Reagovat
Mazlo [413] -- 23. 01. 2006 22:20:55
to Binduch:

'\n' znamená stisknutý Enter ve formuláři ;)

Ano, o escapování proměnných taky někdy napíšu, ale teďka ne ... :-)
Webmaster | Kontakt | Reagovat
Littlemaple [555] -- 17. 02. 2006 18:50:45
Kašpy má pravdu, v tomto se dá nádherně regulárně rochnit a výsledky budou vychytanější :D. Ale jako úvod do problematiky dobré.
nofate [1389] -- 15. 02. 2007 18:33:50
Peknej navod, fakt. Akorat pro nahradeni \n za br nepouzivam str_replace ale nl2br
nofate at mojelinky dot com | www | Reagovat
nofate [1390] -- 15. 02. 2007 19:26:32
Mno ještenasledovni 3 radky:
$text = Str_Replace("&","&a mp;",$text);
$text = Str_Replace("<","&lt ;",$text);
$text = Str_Replace(">","&gt ;",$text);

bych nahradil jednim a bezpecnejsim:

$text = htmlspecialchars($text);

Proc si kmplikovat zivot a zbytecne prasit ve skriptech... ;-)
nofate at mojelinky dot com | www | Reagovat
piugklug [1397] -- 01. 03. 2007 16:00:06
<lugtiu > iougioug
jiji (zavinac) seynam.cy | IM: <uygu | Reagovat
xxxx [1432] -- 03. 04. 2007 03:38:51
xandy (zavinac) xapi.rc | IM: 22554477 | Reagovat
Greeg [1433] -- 03. 04. 2007 03:43:34
ještě bych to doplnil na začátku o funkci trim(); která odstraní prázdné znaky, aby si věděl, že jsem do poviného pole neudělal jen dva "Entery"

if (trim($text) == "") {
echo "Musíš pole vyplnit!";
exit;}


:D
nemam (zavinac) zadnej.radsi | Reagovat
blazen [1458] -- 19. 04. 2007 02:54:03
hele proc mi nejde
$text = str_replace("\n","<br />",$text)??
blazen [1459] -- 19. 04. 2007 02:55:09
poradite mi? proc mi nefunguje odradkovani a pouzivam to presne jako je to tady? :(
blazen [1460] -- 19. 04. 2007 02:55:51
jen zkousim zda vam to tu funguje
aaa
aaa
Dudu [1471] -- 13. 05. 2007 21:12:56
Cool, to sem přesně hledal :-) Btw, mily mazlo, mam Te v kontaktech, nevim proc sem si te pridaval, ale asi to bylo neco ohledne PHP. Totiz desne zapominam :-X Az budu neco potrebovat ohledne PHP, ozvu se ;)
dudlitko@jabber.cz
dudu_us (zavinac) centrum.cz | www | IM: dudlitko@jabber.cz | Reagovat
as [1476] -- 04. 06. 2007 10:29:27
;) :-) :D 8-) [b][/b] 8-) 8-) 8-) <?php echo "ahoj"; ?>
fasf | www | IM: sfafs | Reagovat
Jára [1504] -- 01. 12. 2007 20:33:49
Mám problém, když v mý návštěvní knize zadám např: [b] a neukončím ho, tak mi ztuční i všechny ostatní vzkazy stránky. Jak to ošetřit?
Díky moc
jar.dvor (zavinac) seznam.cz | Reagovat
jsk [1507] -- 20. 12. 2007 19:20:42
Dobrý den,
líbí se mi to, jen mi to nejde použít na text uložený v souboru, spíše mi ho to celý vymaže. Otevřu, načtu změním a mám prázdný (0kb) soubor.
Za radu díky předem.
jsk
jsk (zavinac) centrum.cz | Reagovat
Pokus [1521] -- 01. 03. 2008 14:03:39
[bpokus
Pokus [1522] -- 01. 03. 2008 14:03:58
[b]pokus
DaVidEk.S [1531] -- 22. 03. 2008 17:57:58
Výborny návod musim ho skusit !!!
davidek.s (zavinac) emial.cz | IM: 342572302 | Reagovat
DaVidEk.S [1532] -- 22. 03. 2008 18:03:14
Tak sem to vyzkousel ale nejak to nejde :( help me !!!


<?
$text = Str_Replace("&","&a mp;",$text);

$text = Str_Replace("<","&lt ;",$text);
$text = Str_Replace(">","&gt ;",$text);
$text = Str_Replace(":)"," <img src=\"smiles/smajlik.gif\" alt=\":)\"/>",$text);< br /> $text = Str_Replace("","<stro ng>",$text);
$text = Str_Replace("[/B]","</st rong>",$text);
$text = Str_Replace("","<em&g t;",$text);
$text = Str_Replace("
","</em >",$text);
$text = Str_Replace("\n","<br />",$text);

$text = '[b]Vytvořen nový web
;<<<<<<<<<< )<br>Zacatky noveho webu se blizi:!!<br><br>Makám na zmenach dejte mi tyden :P<br>Chyby v toplistu se brzo opravi jen delam ted kostru a menu atd.. toplist se upravi potom <br><br><br><br></ div> ';
echo ' ', $text,' ';
?>
davidek.s (zavinac) emial.cz | IM: 342572302 | Reagovat

Navigace

Kategorie

Nejnovější články z RSSAd

Zobrazit podobné články

Nejnovější články z RSSAd


© 2005 - 2006 Jiří Zamazal alias Mazlo | Web pohání MRSS 1.0 | XHTML 1.0 Strict | Valid CSS | RSS: články / komentáře |