Думаю, полезно было бы изоложить и принципы для других СУБД. Тогда бы этот FAQ был полезен не только начинающим но и профессионалам, которых судьба заставляет писать под незнакомые или малознакомые СУБД.Конкретные правила экранирования могут отличаться для других СУБД, но общий принцип остается прежним.
Буду рад вставить в фак эти принципы, если кто-нибудь напишет.Думаю, полезно было бы изоложить и принципы для других СУБД.
принято, со временем постараюсь заменить.short_open_tag никто не отменял
Верно. Правда, если учесть, уже и само это применяние имеет весьма посредственное отношение к теме фака, то htmlspecialchars и подавно не к месту. Но напишу., htmlspecialchars надо использовать всегда
function strips(&$el) {
if (is_array($el))
foreach($el as $k=>$v)
strips($el[$k]);
else $el = stripslashes($el);
}
if (get_magic_quotes_gpc()) {
strips($_GET);
strips($_POST);
strips($_FILES);
strips($_COOKIE);
strips($_REQUEST);
if (isset($_SERVER['PHP_AUTH_USER'])) $_SERVER['PHP_AUTH_USER'] = stripslashes($_SERVER['PHP_AUTH_USER']);
if (isset($_SERVER['PHP_AUTH_PW'])) $_SERVER['PHP_AUTH_PW'] = stripslashes($_SERVER['PHP_AUTH_PW']);
}
Некоторые понимают выделенное буквально и считают, что в базу ВООБЩЕ не попадают слэши. Не знаю, как это описать коротко и доступно, но как аналогию можно было бы привести что-то типаСледует специально отметить: добавленные слеши НЕ идут в базу. Они нужны только в запросе. При попадании в базу слеши отбрасываются.
print "что случается со слэшами (символ \"\\\") при занесении их в \'базу\'";
ini_set('magic_quotes_gpc',0);
function strips(&$el) {
if (!get_magic_quotes_gpc()) return;
static $flag;
if (empty($flag)) {
$flag=1;
strips($_GET);
strips($_POST);
strips($_FILES);
strips($_COOKIE);
strips($_REQUEST);
if (isset($_SERVER['PHP_AUTH_USER'])) {
$_SERVER['PHP_AUTH_USER'] = stripslashes($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = stripslashes($_SERVER['PHP_AUTH_PW']);
}
} else {
if (is_array($el)) {
foreach($el as $k=>$v) strips($el[$k]);
} else {
$el = stripslashes($el);
}
}
}
strips($fake);
Честно говоря, сам всё время путаюсь: "обратная косая черта" -- это 'back slash'.Слеш, от английского slash - обратная косая черта ("\"),
if (isset($_SERVER['PHP_AUTH_USER'])) strips($_SERVER['PHP_AUTH_USER']);
if (isset($_SERVER['PHP_AUTH_PW'])) strips($_SERVER['PHP_AUTH_PW']);
Может так? Конечно не сильно проще, но имхо поцивильнеенеужели нельзя попроще?..
function strips_real(&$el) {
if (is_array($el)) {
foreach ($el as $k => $v) strips_real($el[$k]);
} else {
$el = stripslashes($el);
}
}
function strips() {
if (!get_magic_quotes_gpc()) return;
static $stripped = false;
if (!$stripped) {
$stripped = true;
strips_real($temp = array(&$_GET, &$_POST, &$_FILES, &$_COOKIE, &$_REQUEST));
//if (isset($_SERVER['PHP_AUTH_USER'])) {
// $_SERVER['PHP_AUTH_USER'] = stripslashes($_SERVER['PHP_AUTH_USER']);
// $_SERVER['PHP_AUTH_PW'] = stripslashes($_SERVER['PHP_AUTH_PW']);
//}
}
}
strips();