Autor Zpráva
LukasCZ
Profil
Zdravím,

potřeboval bych poradit, jak ochránit stránky, před vkládáním HTML tagů do formulářů / databáze...

mám klasická pole, např, jméno, adresa - tam je nejlepší html tagy úplně vyřadit,...

ale pak pole komentář (textarea) - kde bych chtěl html tagy vyřadit taky, ale chtěl bych poradit, jak tam zachovat řádkování entrem - jak se to dělá normálně ve formulářovém poli, nikoly vložením tagu <br> aby to při výpisu dobře vypadalo a dlouhý text zachovával řádkování.

Díky za rady !
LukasCZ
Profil
třeba tady to na diskuse.jakpsatweb.cz - tak bych chtěl aby to takhle fungovalo :-)
Anonymní
Profil *
tak pomocí PHP a fce strtr tagy jednoduše odstraň a prozměnu hranatý závorky jako jsou tady můžeš nahradit... normálnim tagem. chápeš?
Anonymní
Profil *
Pro ukázku:
<?php

$nahrady=array("<b>" => '',"</b>" => '',"" => '<b>',"" => '</b>')
$text=strtr($text,$nahrady);
?>

Možná je ještě něco jednodušího, ale tohle mi přijde už tak hodně jednoduchý...
Anonymní
Profil *
chybička se vloudila sem se prozměnu nedá napsatt hranatá zívorka, takže ještě jednou a místo hranatych tam dam složený...
<?php

$nahrady=array("<b>" => '',"</b>" => '',"{b}" => '<b>',"{/b}" => '</b>')
$text=strtr($text,$nahrady);
?>
LukasCZ
Profil
fajn, tím odstaraním html tagy a ještě mě zajímalo jak je to s řádkováním, jak se tam vloží enter... ve formulářovém poli, když tam udělám enter, tak se to pak v databázi nijak neprojeví, musel bych tam psát složitě <br> nevíte jak na to? Opět příkladem je toto pole na diskuse.jakpsatweb.cz - tady když udělám enter, tak se to pak ve výsledku, ve výpise projeví, ale u mých stránek ne...
Hooonza
Profil *
A co třeba ereg_replace("\n", "<br>", trim($retezec)); ?
Anonymní
Profil *
stačí třeba
$vzkaz=nl2br($vzkaz)
LukasCZ
Profil
no, nějak to nejde :(

na odstranění funkčnosti HTML tagů jsem použil funkci

$text = htmlspecialchars($text);

to funguje... dostanu čisté znaky co nic nedělají, ale pořád s tím řádkováním nevím...

funkci ereg_replace() použít nemůžu, protože ta udělá z \n, <br> - při první vložení by to sice fungovalo, ale kdybych s tím chtěl pak dál pracovat, tak se mi do pole textarea vypíší znaky <br>, které se pak ale vloží znovu do textu - což už nechci !

zajímavé ale je... že když použiju funkci $text = htmlspecialchars($text); tak řádkování zůstává, ale projevuje se pouze v textarea...

tj. <textarea>".$text."</textarea> - vypíše text s řádkováním a odstavci, ale když dám vypsat text mezi běžná data, třeba do <td>".$text."</td> - tak tam se řádkování už neprojevuje a píše to text za sebou... teda řádkuje to na konci, ale nedělá to ty odstavce co to dělá v textarea !
LukasCZ
Profil
tak už vím jak na to :-)

máme proměnou z formuláře $text

tu si převedeme aby nefungovaly HTML tagy pomocí $text = htmlspecialchars($text);

vložíme do DTB.

z databáze pro další úpravu můžeme použít do pole textarea jdnoduše <textarea>".$radek["text"]."</textarea> protože textarea zachovává řádkování \n

ale když to chceme vložit do normálního textu - aby se zachovaly odstavce a řádkování.

tak to převedeme $vypis_textu = ereg_replace("\n", "<br>", trim($radek["text"]));

a pak už jen vložíme hotový text: <td>$vypis_textu</td>

toť vše :-)
VitaZ
Profil
A co to třeba už před uložením udělat takhle?
$vzkaz=NL2BR(HTMLSpecialChars($vzkaz));
Pavel Strejček
Profil
LukasCZ

htmlspecialchars($text, ENT_QUOTES);

jinak se Ti může rozpadnout stránka až někdo zadá uvozovky
loyza
Profil *
NO tak takovýchhle řešení je spousta, ale asi nejlepší je využít nějakou naprogramovanou knihovnu, která tohle pořeší a navíc ji naprogramoval zkušený programátor, a je hodně používaná takže bude asi dobře vyladěná a nebude obsahovat příliš chyb. Třeba tuhle: http://texy.info/cs/
Toto téma je uzamčeno. Odpověď nelze zaslat.