addslashes

(PHP 4, PHP 5, PHP 7)

addslashesЭкранирует строку с помощью слешей

Описание

string addslashes ( string $str )

Возвращает строку с обратным слешом перед символами, которые нужно экранировать. Экранируются одиночная кавычка ('), двойная кавычка ("), обратный слеш (\) и NUL (NULL байт).

Примером использования функции addslashes() может служить добавление данных в строку, которую будет выполнять PHP. Например, если O'Reilly помещается в переменную $str, то вам необходимо экранировать $str. (т.е. eval("echo '".addslashes($str)."';"); )

Для экранирования параметров в базе данных нужно использовать специализированные экранирующие функции СУБД (т.е. (e.g. mysqli_real_escape_string() для MySQL или pg_escape_literal(), pg_escape_string() для PostgreSQL). СУБД имеют разные спецификации для идентификаторов (т.е. имен таблиц, имен полей) и для параметров. Некоторые СУБД, такие как PostgreSQL, предоставляют отдельные функции экранирования идентификаторов (pg_escape_identifier()), но не все СУБД предоставляют такое API. В этом случае ориентируйтесь на документацию к вашей базе данных для выбора верного способа экранирования.

Если в вашей СУБД нет экранирующей функции и она использует символ \ для экранирования специальных символов, то вы можете использовать функцию addslashes(), но только если этот метод экранирования походит для вашей базы данных. Обратите внимание на то, что использование этой функции для экранирования параметров может привести к проблемам безопасности во многих базах данных.

Директива конфигурации magic_quotes_gpc по умолчанию имела значение on в версиях до PHP 5.4, при этом функция addslashes() автоматически применялась ко всем данным GET, POST, и COOKIE. Не используйте addslashes() для данных, обработанных magic_quotes_gpc, чтобы избежать двойного экранирования. Для проверки состояния этой директивы используется get_magic_quotes_gpc().

Список параметров

str

Экранируемая строка.

Возвращаемые значения

Возвращает экранируемую строку.

Примеры

Пример #1 Пример использования addslashes()

<?php
$str 
"Ваше имя O'Reilly?";

// выводит: Ваше имя O\'Reilly?
echo addslashes($str);
?>

Смотрите также

  • stripcslashes() - Удаляет экранирование символов, произведенное функцией addcslashes
  • stripslashes() - Удаляет экранирование символов
  • addcslashes() - Экранирует cтроку слешами в стиле языка C
  • htmlspecialchars() - Преобразует специальные символы в HTML-сущности
  • quotemeta() - Экранирует специальные символы
  • get_magic_quotes_gpc() - Получение текущего значения настройки конфигурации magic_quotes_gpc

Коментарии

Beware of using addslashes() on input to the serialize() function.   serialize() stores strings with their length; the length must match the stored string or unserialize() will fail. 

Such a mismatch can occur if you serialize the result of addslashes() and store it in a database; some databases (definitely including PostgreSQL) automagically strip backslashes from "special" chars in SELECT results, causing the returned string to be shorter than it was when it was serialized.

In other words, do this...

<?php
$string
="O'Reilly";
$ser=serialize($string);    # safe -- won't count the slash
$result=addslashes($ser); 
?>

...and not this...

<?php
$string
="O'Reilly";
$add=addslashes($string);   # RISKY!  -- will count the slash
$result=serialize($add);
?>

In both cases, a backslash will be added after the apostrophe in "O'Reilly"; only in the second case will the backslash be included in the string length as recorded by serialize().

[Note to the maintainers: You may, at your option, want to link this note to serialize() as well as to addslashes().  I'll refrain from doing such cross-posting myself...]
2002-11-12 17:16:25
http://php5.kiev.ua/manual/ru/function.addslashes.html
Автор:
addslashes does NOT make your input safe for use in a database query! It only escapes according to what PHP defines, not what your database driver defines. Any use of this function to escape strings for use in a database is likely an error - mysql_real_escape_string, pg_escape_string, etc, should be used depending on your underlying database as each database has different escaping requirements. In particular, MySQL wants \n, \r and \x1a escaped which addslashes does NOT do. Therefore relying on addslashes is not a good idea at all and may make your code vulnerable to security risks. I really don't see what this function is supposed to do.
2005-04-30 23:23:40
http://php5.kiev.ua/manual/ru/function.addslashes.html
Be careful on whether you use double or single quotes when creating the string to be escaped:

$test = 'This is one line\r\nand this is another\r\nand this line has\ta tab';

echo $test;
echo "\r\n\r\n";
echo addslashes($test);

$test = "This is one line\r\nand this is another\r\nand this line has\ta tab";

echo $test;
echo "\r\n\r\n";
echo addslashes($test);
2008-12-11 04:44:40
http://php5.kiev.ua/manual/ru/function.addslashes.html
Never use addslashes function to escape values you are going to send to mysql. use mysql_real_escape_string or pg_escape at least if you are not using prepared queries yet.

keep in mind that single quote is not the only special character that can break your sql query. and quotes are the only thing which addslashes care.
2010-06-18 04:35:07
http://php5.kiev.ua/manual/ru/function.addslashes.html
To output a PHP variable to Javascript, use json_encode().

<?php

$var 
"He said \"Hello O'Reilly\" & disappeared.\nNext line...";
echo 
"alert(".json_encode($var).");\n";

?>

Output:
alert("He said \"Hello O'Reilly\" & disappeared.\nNext line...") ;
2011-02-01 10:45:18
http://php5.kiev.ua/manual/ru/function.addslashes.html
Автор:
If all you want to do is quote a string as you would normally do in PHP (for example, when returning an Ajax result, inside a json string value, or when building a URL with args), don't use addslashes (you don't want both " and ' escaped at the same time). Instead, just use this function:

<?php
function Quote($Str// Double-quoting only
   
{
   
$Str=str_replace('"','\"',$Str);
    return 
'"'.$Str.'"';
    } 
// Quote
?>

Modify this easily to get a single-quoting function.
2013-10-04 17:30:21
http://php5.kiev.ua/manual/ru/function.addslashes.html
Addslashes is *never* the right answer, it's (ab)use can lead to security exploits!

if you need to escape HTML, it's (unfortunately)
<?php
echo htmlentities($htmlENT_QUOTES|ENT_SUBSTITUTE|ENT_DISALLOWED);
?>
if you need to quote shell arguments, it's
<?php
$cmd
.= " --file=" escapeshellarg($arg);
?>
if you need to quote SQL strings it's
<?php
$sql
.= "WHERE col = '".$mysqli->real_escape_string($str)."'";
?>
or
<?php
$sql
.= "WHERE col = " $pdo->quote($str);
?>
if you need to quote javascript/json strings its
<?php
let str 
= <?=json_encode($strJSON_THROW_ON_ERROR);?>;
?>

if you need to quote a string in xpath it's
<?php
//based on https://stackoverflow.com/a/1352556/1067003
function xpath_quote(string $value):string{
    if(
false===strpos($value,'"')){
        return 
'"'.$value.'"';
    }
    if(
false===strpos($value,'\'')){
        return 
'\''.$value.'\'';
    }
   
// if the value contains both single and double quotes, construct an
    // expression that concatenates all non-double-quote substrings with
    // the quotes, e.g.:
    //
    //    concat("'foo'", '"', "bar")
   
$sb='concat(';
   
$substrings=explode('"',$value);
    for(
$i=0;$i<count($substrings);++$i){
       
$needComma=($i>0);
        if(
$substrings[$i]!==''){
            if(
$i>0){
               
$sb.=', ';
            }
           
$sb.='"'.$substrings[$i].'"';
           
$needComma=true;
        }
        if(
$i < (count($substrings) -1)){
            if(
$needComma){
               
$sb.=', ';
            }
           
$sb.="'\"'";
        }
    }
   
$sb.=')';
    return 
$sb;
}
$xp->query('/catalog/items/item[title='.xpath_quote($var).']');
?>
if you need to quote strings in CSS its
<?php
// CSS escape code ripped from Zend Framework ( https://github.com/zendframework/zf2/blob/master/library/Zend/Escaper/Escaper.php )
function css_escape_string($string)
{
   
$cssMatcher = function ($matches) {
       
$chr $matches[0];
        if (
strlen($chr) == 1) {
           
$ord ord($chr);
        } else {
           
$chr mb_convert_encoding($chr'UTF-16BE''UTF-8'); // $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
           
$ord hexdec(bin2hex($chr));
        }
        return 
sprintf('\\%X '$ord);
    };
   
$originalEncoding mb_detect_encoding($string);
    if (
$originalEncoding === false) {
       
$originalEncoding 'UTF-8';
    }
    ;
   
$string mb_convert_encoding($string'UTF-8'$originalEncoding); // $this->toUtf8($string);
                                                                        // throw new Exception('mb_convert_encoding(\''.$string.'\',\'UTF-8\',\''.$originalEncoding.'\');');
   
if ($string === '' || ctype_digit($string)) {
        return 
$string;
    }
   
$result preg_replace_callback('/[^a-z0-9]/iSu'/*$this->*/$cssMatcher$string);
   
// var_dump($result);
   
return mb_convert_encoding($result$originalEncoding'UTF-8'); // $this->fromUtf8($result);
}

?>

- but never addslashes.
2022-03-02 18:08:00
http://php5.kiev.ua/manual/ru/function.addslashes.html

    Поддержать сайт на родительском проекте КГБ