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();
Реклама для "поддержания штанов":Метки: php
