Как модифицировать данные в PHP для последующей отправки

Раздел: -> Отправка данных

В разработке веб-приложений изменение данных перед отправкой является типовой задачей. PHP предлагает богатый арсенал функций для модификации строк, массивов и объектов. Рассмотрим ключевые подходы, начиная с наиболее надёжного.

Основные способы изменения данных в PHP

Самый эффективный метод: фильтрация и подготовленные запросы.

Для изменения пользовательских данных перед отправкой в базу или внешний API рекомендуется использовать функции фильтрации (filter_var, filter_input) и PDO с параметризованными запросами. Это защищает от XSS и SQL-инъекций, а также гарантирует корректный формат.

$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$name = htmlspecialchars(trim($_POST['name']), ENT_QUOTES, 'UTF-8');
$stmt = $pdo->prepare('INSERT INTO users (email, name) VALUES (?, ?)');
$stmt->execute([$email, $name]);

После такой обработки данные безопасны для отправки.

Типичные ошибки: забыть указать кодировку в htmlspecialchars; использовать устаревшие mysql-функции; не проверять результат фильтрации (false при неудаче).

Как очистить строку от лишних символов перед отправкой?

Для удаления пробелов, табуляции или определённых символов применяют trim(), str_replace() и регулярные выражения.

$raw = "  Привет, мир!  \t\n";
$clean = trim(str_replace(["\t", "\n"], '', $raw));
echo $clean; // "Привет, мир!"
Проблемы: trim() удаляет только пробелы, табуляцию, переводы строк, но не другие управляющие символы. Для всесторонней очистки используйте регулярные выражения или filter_var с флагом FILTER_SANITIZE_STRING (устарел в PHP 8.1).

Как преобразовать числовые данные для корректной отправки?

Часто требуется округление или приведение к определённому формату.

$price = 1234.56789;
$formatted = number_format($price, 2, '.', '');
echo $formatted; // 1234.57
Ошибки: несоответствие локали (запятая вместо точки). Всегда явно указывайте десятичный и тысячный разделители.

Как модифицировать объект перед отправкой в JSON?

Перед кодированием в JSON можно изменить свойства объекта или добавить новые.

$user = new stdClass();
$user->name = 'John';
$user->age = 30;
$user->password = 'secret'; // надо удалить
unset($user->password);
$json = json_encode($user, JSON_UNESCAPED_UNICODE);
echo $json; // {"name":"John","age":30}
Циклические ссылки вызовут ошибку. Используйте json_encode($object, JSON_UNESCAPED_UNICODE | JSON_PARTIAL_OUTPUT_ON_ERROR) и проверяйте ошибки через json_last_error().

Как применить функцию ко всем элементам массива перед отправкой?

array_map() позволяет преобразовать значения.

$tags = [' php ', '  MySQL  ', ' JS '];
$cleanTags = array_map('trim', $tags);
// ['php', 'MySQL', 'JS']
При использовании на ассоциативном массиве array_map() не сохраняет ключи (начиная с PHP 5.6 можно передать оба массива). Для сохранения ключей применяйте array_walk().

Расширенные примеры изменения данных

1. Полный цикл: обработка формы и отправка через cURL

Пример
// Изменение данных формы
$data = [
    'name' => trim($_POST['name']),
    'email' => filter_var($_POST['email'], FILTER_SANITIZE_EMAIL),
    'age' => (int) $_POST['age'] // изменение типа
];

// Дополнительная модификация
$data['name'] = ucwords(strtolower($data['name'])); // капитализация

// Отправка
$ch = curl_init('https://api.example.com/users');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;
// Вывод до изменения: name='Иван', email='ivan@example.com', age='25'
// После изменения: name='Иван', email='ivan@example.com', age=25 (int)
// HTTP запрос: name=%D0%98%D0%B2%D0%B0%D0%BD&email=ivan%40example.com&age=25

2. Глубокая модификация вложенных массивов перед отправкой JSON

Пример
$payload = [
    'user' => [
        'name' => 'Alice',
        'roles' => ['admin', 'editor'],
        'metadata' => ['last_login' => '2023-10-01']
    ],
    'items' => []
];

// Изменить все строки в массиве: обрезать пробелы и экранировать
array_walk_recursive($payload, function (&$value, $key) {
    if (is_string($value)) {
        $value = htmlspecialchars(trim($value), ENT_QUOTES, 'UTF-8');
    }
});

// Добавить поле timestamp
$payload['timestamp'] = time();

// Удалить пустые элементы
$payload['items'] = array_filter($payload['items']);

$json = json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
{
    "user": {
        "name": "Alice",
        "roles": ["admin", "editor"],
        "metadata": {
            "last_login": "2023-10-01"
        }
    },
    "items": [],
    "timestamp": 1696348808
}

3. Изменение данных с помощью регулярных выражений

Пример
$text = 'Код: AB123, Цена: 45.67 €';
// Извлечь числа с плавающей точкой и умножить на курс
$newText = preg_replace_callback(
    '/(\d+\.\d+)/',
    function ($match) {
        return number_format($match[1] * 1.1, 2, '.', '');
    },
    $text
);
echo $newText; // Код: AB123, Цена: 50.24 €

Примечание:

Всегда проверяйте результат модификации. Используйте var_dump() или error_log() для отладки изменений перед реальной отправкой.

Изменение данных в PHP - comments

En
Php изменить (php)