Часто у начинающих программистов на PHP вознкает такая проблема: после сохранения данных формы оказывается, что задублировались символы \ или наоборот, куда-то исчезли.
И зачастую, на тестовом сервере все работает, а у хостера - глючит.
Проблема возникла из-за того, что исторически на многих серверах сключена опция PHP magic_quotes_gpc.
Её ввели из-за того, что начинающие программисты часто забывали эскейпить управляющие символы при записи в БД и из-за этого SQL-запросы оказывались уязвимы. Или вообше неработали. Однако, автоматический эскейп сам по себе добавил неразбериху, т.к. некоторые скрипты ожидают что он включен, а другие - наоборот. Так что в итоге рекомендация разработчиков - не использовать этот режим.
Что-же нужно делать? Моё мнение - данные в программе должны представляться в исходном виде, немодифицированными. А эскейпится - при записи в БД или выводе в HTML.
Чтобы этого достичь, при чтении данных формы надо сначала проверить включен-ли magic_quotes_gpc а затем, при необходимости, удалить лишние слэши при помощи stripslashes().
Пример:
Код:
$text = stripslashes_smart($_POST['text']);
function stripslashes_smart($val){ return get_magic_quotes_gpc()?stripslashes($val):$val; }
|
См. также:
http://ru.php.net/manual/ru/function.get-magic-quotes-gpc.php
http://ru.php.net/manual/ru/function.stripslashes.php