Я не думаю, что это был самый ясный вопрос, но пример должен сделать это немного яснее.
У меня есть таблица с именами фильмов, некоторые из которых содержат апострофы. У меня есть окно поиска, которое используется для поиска фильмов.
Если я выполняю поиск через
mov_title = '$search_keywords'
все это работает, но этот метод не даст никаких результатов для частичного поиска, поэтому я должен использовать это
mov_title LIKE '%$search_keywords%'
Этот метод отлично подходит для заголовков, которые являются A-Za-z0-9, но если заголовок имеет апостроф, он не может найти фильм, даже если я делаю точное совпадение.
Прежде чем заголовки будут сохранены в БД, я прощу их через это:
$search_keywords = htmlspecialchars(mysql_escape_string($_GET["search_keywords"]));
Таким образом, в БД перед каждым апострофом есть косая черта.
Единственный способ сопоставить название фильма с апострофом – физически поставить переднюю косу перед апострофом в окне поиска.
Это кажется настолько тривиальным, и я уверен, что решение болезненно очевидно, но я просто не вижу его.
Используйте mysql_real_escape_string()
и не используйте htmlspecialchars()
. Последнее не для экранирования базы данных, это для производства HTML.
Это происходит только потому, что вы удалили данные для вывода html перед выполнением вывода! Вы должны делать это прямо перед выполнением вывода, то есть:
<li><?php echo htmlspecialchars($some_var); ?></li>
Unescape значения в вашей базе данных и изменить приложение для выхода только на выходе. В настоящее время у вас нет другого пути, кроме того, что htmlspecialchars(mysql_real_escape_string())
делаете htmlspecialchars(mysql_real_escape_string())
в $ search_string.
Даже если имеет смысл сбежать из HTML уже при вставке в базу данных, mysql_real_escape_string()
будет внешней функцией, а не внутренней функцией.
Если вы предпочитаете сохранять свою базу данных без изменений, вы можете просто запустить функцию htmlspecialchars () для любых поисковых слов, которые вы ищете, прежде чем строить запрос. Хотя я рекомендую помещать данные в базу данных точно так же, как есть (но используйте mysql_real_escape_string (), чтобы избежать ее, чтобы препятствовать попыткам SQL-инъекций). Затем используйте htmlspecialchars (), когда вы печатаете данные в браузере.