Masz dobry pomysł na przechowywanie tekstu w bazie danych jako surowego. Nie jestem pewien, do czego służą wszystkie elementy encji HTML; nie powinieneś tego robić, aby wstawić bazę danych.
[Jedynym powodem, dla którego mogę wymyślić, dlaczego możesz próbować zdekodować dane wejściowe przychodzące do bazy danych, byłoby to, że otrzymujesz odwołania do znaków, takie jak Š
w formularzu zgłoszeniowym. Jeśli tak się dzieje, dzieje się tak, ponieważ użytkownik wprowadza znaki, które nie istnieją w kodowaniu używanym przez stronę z formularzem. Ta forma kodowania jest całkowicie fałszywa, ponieważ nie można wtedy odróżnić użytkownika wpisującego Š
i dosłownie wpisując Š
! Powinieneś tego uniknąć, używając kodowania UTF-8 dla wszystkich swoich stron i treści, ponieważ każdy możliwy znak pasuje do tego kodowania.]
Ciągi w twoim skrypcie powinny zawsze być czystym tekstem bez znaków ucieczki. Oznacza to, że nie robisz z nimi nic, dopóki nie wypiszesz ich w kontekście, który nie jest zwykłym tekstem. Aby umieścić je w ciągu SQL:
$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");
(lub użyj sparametryzowanych zapytań, aby uniknąć konieczności ręcznego zmieniania go.) Podczas umieszczania treści w HTML:
<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />
(możesz zdefiniować funkcję pomocniczą o krótszej nazwie, np. function h($s) { echo htmlspecialchars($s, ENT_QUOTES); }
jeśli chcesz zmniejszyć ilość pisania, które musisz wykonać w szablonach.)
I... to prawie wszystko. Nie musisz przetwarzać ciągów wychodzących z bazy danych, ponieważ są to już surowe ciągi. Nie musisz przetwarzać ciągów wejściowych(*), innych niż walidacja pól specyficznych dla aplikacji, którą chcesz wykonać.
*:dobrze, chyba że magic_quotes_gpc
jest włączona, w takim przypadku musisz albo stripslashes()
wszystko, co pochodzi z get/post/cookie lub, moja ulubiona opcja, natychmiast kończy się niepowodzeniem:
if (get_magic_quotes_gpc())
die(
'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
'Turn them off, you idiot, or I refuse to run. So there!'
);