Как модифицировать данные в 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() для отладки изменений перед реальной отправкой.