|
Как вы обходите кавычки?Обсуждение темы Как вы обходите кавычки? в разделе HTML, CSS, JavaScript, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Юзер ввел даные в форму. В базу я записал mysql_escape_string($val); Потом на странице редактирования у меня Код: <input type="text" name="name" value="<?=stripslashes($name)?>" /> Но ... |
|
Опции темы |
03.05.2010, 11:49 | #1 |
|
Юзер ввел даные в форму. В базу я записал mysql_escape_string($val);
Потом на странице редактирования у меня Код:
<input type="text" name="name" value="<?=stripslashes($name)?>" /> |
|
03.05.2010, 11:53 | #2 |
|
" и '
|
|
03.05.2010, 12:05 | #3 |
|
PHP код:
Два - а кто вам сказал, что слэши надо снимать? Вообщет для начала нужно проверить значение magic_quotes_gps... И только если оно установлено, тогда сию функцию и применять. |
|
03.05.2010, 12:08 | #4 |
|
Асмодиан, а такое различие кавычек, что я привел, приемлемо?
|
|
03.05.2010, 12:15 | #5 |
|
Niemans, не понял тебя.
|
|
03.05.2010, 12:17 | #6 |
|
Ну чтобы отличие было, одинарные и двойные использовать.
|
|
03.05.2010, 12:26 | #7 |
|
Niemans, понимаешь в чём проблемма: это же тот текст, который ввёл пользователь. Но он же мог текст ввести, в котором есть и одинарные и двойные кавычки. И в любом случае html код должен быть корректен.
htmlspecialchars именно для этого и предназначен. Он преобразует проблемные символы в html коды (" например) |
|
03.05.2010, 15:54 | #8 |
|
htmlspecialchars я делаю перед записью в базу. Но оно мне так и выводит "
|
|
03.05.2010, 19:07 | #9 |
|
BleSSeD, эмммм... оригинальная логика.
Только вы бы перед тем, как возражать, попробовали бы сделать так, как я предложил. А вообще на будущее рассказываю свод правил о строковых преобразованиях в php. №1. Из формы в php. На самом деле наиболее правильно в php хранить строку в "нормальном" виде. То есть без лишних слешей, специальных (html/xml) последовательностей и прочей эквилибристики. Но вот информация, пришедшая к нам из формы зачастую содержит ЛИШНЕЕ - и виной тому дурацкая директива php magic_quotes. Она добавляет лишние слэши перед всеми кавычками. Зачем она это делает - об этом позже. Так что по-хорошему нужно от этих слэшей избавиться. НО эта директива может быть и убрана, при этом стандартная очистка может поубивать все слэши из введённого пользователем текста. Посему юзаем следующую конструкцию: PHP код:
Вот это конструкция гарантирует нам, что результатом будет чистый текст без всяких добавок. №2 Из php в форму Довольно просто вставлять тексты в какие-нибудь дивы. Ну что - просто PHP код:
Получили невалидную вёрстку. А ведь я могу пойти и дальше, написав так: "<script>злой_троян</script>" Да и очень часто нам нужно не внуть блока текст выводить, а внутрь аттрибута. Ну вот пример топикстартера довольно востребован. То есть мы пишем введённый текст в атрибут. А тут уж не только html-тэги нам будут мешать жить, но и обычные кавычки. Решается это всё одной лишь функцией php: PHP код:
То есть пользователь нам ввёл: <a href="mysite.ru"/> А после этой функции код стал: <a href="mysite.ru"/> Если этот текст запихнуть в value, получиться так: <input type="text" name="name" value="<a href="mysite.ru"/>" /> И у нас на формочке появиться поле ввода, в котором вбит текст: <a href="mysite.ru"/> То есть то, что нам и надо. №3 Из php в MySQL А теперь вернёмся к нашему magic_quotes - для чего это вообще было сделано. Сама эта конструкция была добавлена в php для упрощения работы с базами данных. Ведь как мы пишем комманды на SQL $cmdtext = "INSERT INTO `mytable` (`id`, `name`) VALUES ({$id}, '{$name}')"; То есть: перед тем, как команда попадёт в само ядро MySQL, php вместо {$id} и {$name} вставит конкретные значения. И получиться так: INSERT INTO `mytable` (`id`, `name`) VALUES (1, 'Вася') Отлично. Но если наш юзер больной на весь вконтакте, то он может ввести в поле формы "имя" и следующее: "Василий 'Пупок' Пупочкин" И что мы получим в SQL комманде? INSERT INTO `mytable` (`id`, `name`) VALUES (1, 'Василий 'Пупок' Пупочкин') Ага - заметили, что на "пупок" оказался ВНЕ строковой константы, и команда INSERT не пройдёт. А если наш пупкин ещё и хакер, то он мог ввести и следующий прикол: "some'); DROP TABLE `mytable`; SELECT ('" Ну и результатом такой вот операции у нас будет убитая таблица mytable. Здорово? В случае с формами, мы использовали замену символов ' и " на из html-последовательности, но в SQL это делать не слишком правильно, так как тем самым мы можем сильно навредить поиску по сайту и прочим операциям SQL. Решение для SQL другое - это энкейпс-последовательности. Суть проста - использование слеша. Если вы знаете php, то наверняка такими последовательносями пользовались сами. PHP код:
Остаётся лишь выбрать: довериться готовому magic_quotes и материться, почему ваша чудная прога не работает на другом хостинге, или использовать специально сделанную для данного использования функцию PHP код:
№4 из MySQL в php А вот тут ничего делать не надо - функции mysql выдают на выход полностью правильную строку. Как резюме: Разумеется, всегда можно плюнуть на использование правильных функций и делать всё так, чтоб работало. Например htmlspecialchars можно использовать для преобразования текста перед вводом в mySQL. Но вот получите вы обратно из sql эту строку и решите, что вам для чего-то панадобилась её подстрока из 20 первых символов (ну чё далеко ходить - в ячейку таблицы больше не влезает)... И получиться у вас прикольное поведение, что вместо точных 20, все строки будут разной длины, полностью невалидная вёрстка (из-за всяких &qo</td>) и куча прочих мелких сюрпризов |
|
Этот пользователь сказал спасибо Асмодиан за это полезное сообщение: | BleSSeD (05.05.2010) |
07.05.2010, 13:59 | #10 |
|
http://blessed.te.ua/test.php
Код: Код:
<?php $str = "Hello, ' a"; ?> <input type="text" value='<?=htmlspecialchars($str)?>' /> |
|
|
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|