ďťż

[PHP] htmlspecialchars - kiedy użyć? formularze i cudzysłowy

       

Podstrony


telcocafe

Istnieje formularz do edycji nowości z polem <textarea>, gdzie można używać HTML. Przy zapisie do bazy i wyświetlaniu treść NIE jest poddawana zabiegowi htmlspecialchars().

Pytanie - czy należy użyć htmlspecialchars() dla danych umieszczanych w polu <textarea> w formularzu? Kiedyś doszedłem do wniosku, że TAK, ale teraz mam wątpliwości.

Problem - cudzysłowy „ i ” są zamieniane przez bazę danych na & #8222; i & #8221; - takiego tekstu nie da się edytować! Jaki zabieg zastosować, aby podobne znaki były zamieniane z powrotem na ich pierwotne odpowiedniki?

PS. Widzę, że IPB nie zamienia wszystkich encji & na & amp; - za pomocą standardowych funkcji w PHP raczej tego nie da się osiągnąć?
Użytkownik Ferrari edytował ten post 17 grudzień 2008, 00:17


Popatrz na biblioteki stosowane w niektórych frameworkach, np. CodeIgniter (proste klasy). Pola formularza muszą być odporne na możliwość ich "rozwalenia" za pomocą kodu typu:
"><textarea> czyli jakiś zły tag
Przed zapisem do bazy dane enkodowane można "odkodowac" i odpowiednio zabezpieczane zapisać.


Istnieje formularz do edycji nowości z polem <textarea>, gdzie można używać HTML. Przy zapisie do bazy i wyświetlaniu treść NIE jest poddawana zabiegowi htmlspecialchars().

Pytanie - czy należy użyć htmlspecialchars() dla danych umieszczanych w polu <textarea> w formularzu? Kiedyś doszedłem do wniosku, że TAK, ale teraz mam wątpliwości.

Problem - cudzysłowy „ i ” są zamieniane przez bazę danych na & #8222; i & #8221; - takiego tekstu nie da się edytować! Jaki zabieg zastosować, aby podobne znaki były zamieniane z powrotem na ich pierwotne odpowiedniki?

PS. Widzę, że IPB nie zamienia wszystkich encji & na & amp; - za pomocą standardowych funkcji w PHP raczej tego nie da się osiągnąć?

Nie ma sensu w twoim przypadku myślenia używać htmlspecialchars() a potem zmieniać to na tagi. Proponuje więc zrobić inaczej:
1. Urzyć htmlspecialchars()
2. zamiast "<>" takich znaków Userowi kazać dać takie "[]" a następnie przed zapisaniem do bazy zamienić s powrotem na "<>". czyli html tak ale z zastąpionymi znakami.


Problem - cudzysłowy „ i ” są zamieniane przez bazę danych na & #8222; i & #8221; - takiego tekstu nie da się edytować! Jaki zabieg zastosować, aby podobne znaki były zamieniane z powrotem na ich pierwotne odpowiedniki?
Wszystko się da :-) Po prostu gdy wrzucasz do bazy tekst po użyciu funkcji htmlspecialchars, podczas jego edycji nic z nim nie robisz. Przecież edytując tekst, pobierasz go (przy if (empty($_POST))), a w przeciwnym wypadku już musisz użyć tę funkcję :-)
I jeszcze przykład ode mnie, bo nie wiem, jak Ty to robisz:<?php if (empty($_POST)) { $dane = $db->getItem('select tytul, tekst from tabela where id=1'); $_POST['tytul'] = $dane['tytul']; $_POST['tekst'] = $dane['tekst']; } else $_POST = array_map('htmlspecialchars', $_POST); ?> <input name="tytul" value="<?php echo $_POST['tytul']; ?>" /> <textarea name="tekst"><?php echo $_POST['tekst']; ?></textarea>

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.