PHP, magic_quotes и экранирование кавычек (откуда берется слэш?)

Директива magic_quotes была создана для экранирования кавычек в данных, поступающих на вход в php-скрипт. Видимо, в расчете на забывчивых программистов, которые пытались использовать эти данные без предварительной обработки для вставки в базу.

Несмотря на то, что весь функционал magic_quotes упразднен, на сегодняшний день многие хостинг-компании предоставляют услуги с поддержкой более ранних версий PHP.

This feature has been DEPRECATED as of PHP 5.3.0.
… and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

Многие скрипты не проверяют состояние флагов magic_quotes.. Кроме того, некоторые из них предполагают автоматическое экранирование спецсимволов (за что, как раз и отвечает отмененная директива).

Как быстро и без лишних усилий настроить (или сбросить) экранирование кавычек без использования magic_quotes?

Отключаем magic_quotes в PHP.ini

; Magic quotes для входных данных (GET/POST/Cookie).
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ‘ with ” instead of \’).
magic_quotes_sybase = Off

или в .htaccess

php_flag magic_quotes_gpc Off

Если же отключить magic_quotes по какой-либо причине не удается, можно воспользоваться функцией, которая “сбросит” экранирование в зависимости от текущего значения

function stripslashes_for_array(&$arr) {
 foreach($arr as $k=>$v) {
  if (is_array($v)) {
   stripslashes_for_array($v);
   $arr[$k] = $v;
  } else {
   $arr[$k] = stripslashes($v);
  }
 }
}
function fix_magic_quotes_gpc() {
 if (get_magic_quotes_gpc())  {
  stripslashes_for_array($_POST);
  stripslashes_for_array($_GET);
  stripslashes_for_array($_COOKIE);
 }
}
# Убираем экранирование в функциях $_GET, $_POST, $_COOKIE
if (function_exists ('get_magic_quotes_gpc')) // а есть ли смысл?
  fix_magic_quotes_gpc();
Реклама для "поддержания штанов":

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Добавить комментарий