Как вы кодируете апостроф, чтобы он был доступен для поиска в MySQL? - PullRequest
2 голосов
/ 07 марта 2009

Не думаю, что это был самый ясный вопрос, но пример должен сделать его немного понятнее.

У меня есть таблица с названиями фильмов, некоторые из которых содержат апострофы. У меня есть окно поиска, которое используется для поиска фильмов.

Если я выполняю поиск через

mov_title = '$search_keywords'

все это работает, но этот метод не даст результатов для частичного поиска, поэтому я должен использовать это

mov_title LIKE '%$search_keywords%'

Этот метод отлично работает для титров A-Za-z0-9, но если заголовок имеет апостроф, он не сможет найти фильм, даже если я точно совпаду.

Перед тем, как заголовки хранятся в БД, я проверяю их следующим образом:

$search_keywords = htmlspecialchars(mysql_escape_string($_GET["search_keywords"]));

Так что в БД перед каждым апострофом стоит косая черта.

Единственный способ сопоставить название фильма с апострофом - физически поставить косую черту перед апострофом в поле поиска.

Это кажется таким тривиальным, и я уверен, что решение до боли очевидно, но я просто не вижу его.

Ответы [ 3 ]

4 голосов
/ 07 марта 2009

Используйте mysql_real_escape_string() и не используйте htmlspecialchars(). Последнее не для выхода из базы данных, а для производства HTML.

1 голос
/ 07 марта 2009

Это происходит только потому, что вы экранировали данные для вывода html перед выполнением вывода! Вы должны сделать это только вправо перед выполнением вывода, т. Е .:

<li><?php echo htmlspecialchars($some_var); ?></li>

Unescape значения в вашей базе данных и изменить приложение для выхода только на выходе. В настоящее время у вас нет другого способа, кроме как сделать htmlspecialchars(mysql_real_escape_string()) для строки $ search_string.

Даже если имеет смысл переходить к HTML уже при вставке в базу данных, mysql_real_escape_string() будет внешней функцией, а не внутренней.

0 голосов
/ 07 марта 2009

Если вы предпочитаете сохранить базу данных нетронутой, вы можете просто запустить функцию htmlspecialchars () для любых искомых слов, которые вы ищете, прежде чем создавать запрос. Хотя я рекомендую помещать данные в базу данных точно так же, как есть (но используйте mysql_real_escape_string (), чтобы избежать их, чтобы препятствовать попыткам внедрения SQL). Затем используйте htmlspecialchars () при печати данных в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...