Stripslashes: примеры (PHP)

Использование stripslashes в PHP для обработки строк
Раздел: Работа со строками
stripslashes(string string): string
Основные сведения о функции stripslashes

Функция stripslashes в PHP предназначена для удаления экранирующих слешей из строк. Чаще всего она применяется для обработки данных, которые были экранированы функцией addslashes или при автоматическом экранировании, включенном директивой magic_quotes_gpc (удалена в PHP 5.4.0).

Синтаксис и параметры

Синтаксис функции:
stripslashes(string $string, string $characters = "\\"): string

  • $string (обязательный) - строка, из которой нужно удалить экранирующие слеши
  • $characters (опциональный, добавлен в PHP 8.3.0) - список символов, для которых нужно удалить экранирование
Базовые примеры использования
Удаление стандартных экранирующих слешей
// Пример 1: Базовое использование
$str = "Это \"тестовая\" строка\\слэш";
echo stripslashes($str);
Это "тестовая" строка\слэш
Использование с указанием символов (PHP 8.3+)
// Пример 2: Указание конкретных символов для обработки
$str = "Экранированные \"кавычки\" и \'апострофы\'";
echo stripslashes($str, "\\'\"");
Экранированные "кавычки" и 'апострофы'
// Пример 3: Обработка только обратных слешей
$str = "Путь: C:\\Windows\\System\\";
echo stripslashes($str, "\\\\");
Путь: C:\Windows\System\
Похожие функции в PHP
  • stripcslashes - удаляет экранирование в стиле языка C, обрабатывает специальные последовательности типа \n, \r, \t
  • htmlspecialchars_decode - преобразует HTML-сущности обратно в символы
  • urldecode - декодирует URL-кодированную строку
  • json_decode - декодирует JSON строку, автоматически обрабатывая экранирование
Критерии выбора функции

Функцию stripslashes применяют для обработки данных, экранированных addslashes. Для обработки JSON данных предпочтительнее json_decode. При работе с HTML используйте htmlspecialchars_decode.

Распространенные ошибки
Двойное удаление слешей
// Ошибка: многократное применение функции
$str = "Текст с \"кавычками\"";
$result = stripslashes(stripslashes($str));
echo $result;
Текст с "кавычками"
// Второй вызов удаляет сами кавычки
Неправильная обработка данных из БД
// Ошибка: использование stripslashes для PDO-экранирования
$pdo = new PDO(...);
$input = "O'Reilly";
$stored = $pdo->quote($input); // Экранирование через PDO
$result = stripslashes($stored); // Неправильно!
echo $result;
Игнорирование контекста экранирования
// Неправильное применение к уже чистым данным
$clean = "Обычная строка";
$result = stripslashes($clean); // Бессмысленная операция
echo $result === $clean ? 'Строка не изменилась' : 'Ошибка';
Строка не изменилась
Изменения в версиях PHP
  • PHP 8.3.0 - добавлен необязательный параметр $characters, позволяющий указать, для каких символов удалять экранирование
  • PHP 7.0.0 - функция стала строго типизированной, при передаче нестрокового аргумента выдается предупреждение
  • PHP 5.4.0 - удалена директива magic_quotes_gpc, что уменьшило необходимость в использовании функции
Расширенные примеры использования
Обработка многомерных массивов
Пример php
// Рекурсивная обработка массива
function stripslashes_deep($value) {
    return is_array($value) 
        ? array_map('stripslashes_deep', $value) 
        : stripslashes($value);
}

$data = [
    'text' => "Экранированная \"строка\"",
    'nested' => ['item' => "Еще \'одна\' строка"]
];

print_r(stripslashes_deep($data));
Array
(
    [text] => Экранированная "строка"
    [nested] => Array
        (
            [item] => Еще 'одна' строка
        )

)
Комбинирование с другими функциями
Пример php
// Обработка данных формы после экранирования
$input = addslashes("User's \"special\" data ");
$step1 = stripslashes($input);
$step2 = htmlspecialchars($step1, ENT_QUOTES);
echo $step2;
User's "special" data <script>alert('xss')</script>
Использование с параметром characters (PHP 8.3+)
Пример php
// Селективное удаление экранирования
$str = "Кавычки: \"двойные\", апострофы: \'одинарные\', слеши: \\\\";

// Удаляем экранирование только для кавычек
$result1 = stripslashes($str, "\"");
echo $result1 . "\n";

// Удаляем экранирование для нескольких типов символов
$result2 = stripslashes($str, "\"'\\\\");
echo $result2;
Кавычки: "двойные", апострофы: \'одинарные\', слеши: \\\\
Кавычки: "двойные", апострофы: 'одинарные', слеши: \\
Обработка данных из legacy-систем
Пример php
// Эмуляция обработки данных с magic_quotes_gpc
function fix_magic_quotes($data) {
    if (get_magic_quotes_gpc()) {
        return stripslashes($data);
    }
    return $data;
}

// Современная реализация для совместимости
$legacy_data = "Данные из старой системы: O\'Brien \"test\"";
$processed = stripslashes($legacy_data);
echo $processed;
Данные из старой системы: O'Brien "test"
Аналоги в других языках программирования

Stripslashes в Javascript

// Удаление экранирующих слешей в JavaScript
let str = "Экранированная \\"строка\"";
let result = str.replace(/\\(["'\\])/g, '$1');
console.log(result);
Экранированная "строка"

Stripslashes в Python

# Удаление экранирующих слешей в Python
import re
str = "Экранированная \\"строка\""
result = re.sub(r'\\(["\'\\])', r'\1', str)
print(result)

# Альтернатива через decode
str2 = "Экранированная \\"строка\"".encode().decode('unicode_escape')
print(str2)
Экранированная "строка"
Экранированная "строка"

Stripslashes в MySQL

-- Функция UNESCAPE в MySQL (нестандартная)
-- Обычно используют REPLACE
SELECT REPLACE(REPLACE('Экранированная \"строка\"', '\\"', '"'), '\\\\', '\\');
Экранированная "строка"

PHP stripslashes function comments

En
Stripslashes Un-quotes a quoted string