Имате правилната идея да запазите текста в базата данни като необработен. Не съм сигурен за какво са всички HTML обекти; не трябва да правите това за вмъкване на база данни.
[Единствената причина, поради която се сещам защо може да се опитате да декодирате входящия вход за базата данни, е, ако установите, че получавате препратки към знаци като Š
във вашия вход за подаване на формуляра. Ако това се случва, това е защото потребителят въвежда знаци, които не съществуват в кодирането, използвано от страницата с формуляра. Тази форма на кодиране е напълно фалшива, защото тогава не можете да правите разлика между потребителя, който въвежда Š
и буквално напишете Š
! Трябва да избягвате това, като използвате кодирането UTF-8 за всичките си страници и съдържание, тъй като всеки възможен знак се вписва в това кодиране.]
Низовете във вашия скрипт винаги трябва да са необработен текст без екраниране. Това означава, че не правите нищо с тях, докато не ги изведете в контекст, който не е обикновен текст. Така че за поставянето им в SQL низ:
$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");
(или използвайте параметризирани заявки, за да избегнете необходимостта да го избягвате ръчно.) Когато поставяте съдържание в HTML:
<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />
(можете да дефинирате помощна функция с по-кратко име като function h($s) { echo htmlspecialchars($s, ENT_QUOTES); }
ако искате да намалите количеството въвеждане, което трябва да правите в шаблоните.)
И... това е почти всичко. Не е необходимо да обработвате низове, които излизат от базата данни, тъй като те вече са необработени низове. Не е необходимо да обработвате въведени низове (*), освен което и да е валидиране на специфично за приложението поле, което искате да направите.
*:добре, освен ако magic_quotes_gpc
е включен, в който случай трябва или да stripslashes()
всичко, което идва от get/post/cookie, или, любимата ми опция, веднага се проваля:
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!'
);