У вас есть правильная идея сохранить текст в базе данных как необработанный. Не уверен, для чего предназначен весь объект сущности 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/записи/печенье, или, мой привилегированного вариант, просто сразу не в состоянии:
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!'
);
Я думаю, что пример категории y, написанный выше, в первый раз, когда пользовательские критерии теста будут записаны в базу данных как raw.When отредактируйте категорию (потому что htmlspecialchars ($ category)) будут записаны как теги ' s, но я предпочитаю писать как raw.Correct me if worng.Thanks для вашего ответа – ntan
'htmlspecialchars ($ category)' будет * записан * в HTML как 'test ' s categories', yes. Но это всего лишь кодировка для чтения браузером; фактическое значение полученного поля формы в DOM является «категориями тестов», и именно эта незакодированная строка вы вернетесь в свою '$ _POST ['category']' при отправке формы. – bobince
Итак, когда я хочу выполнить поиск по таблицам, я должен преобразовать пользовательский ввод с помощью htmlspecialchars или нет. Я имею в виду, что политика написания в DB должна быть ONE. Я не могу записать 10 записей с необработанным форматом и 10 других с htmlspecialchars.I предпочитают необработанный формат – ntan