Mb http input: примеры (PHP)
mb_http_input(?string $type = null): array|string|falseФункция mb_http_input
Функция mb_http_input() определяет кодировку символов входных данных HTTP-запроса, которые обрабатываются расширением mbstring. Применяется в сценариях, где важно корректно интерпретировать многобайтовые строки, поступающие от пользователя через формы, куки или другие механизмы HTTP.
- type (необязательный): строка, указывающая тип входных данных для проверки.
- G: данные GET.
- P: данные POST.
- C: данные COOKIE.
- S: строковые данные.
- I: все входные данные (все перечисленные выше).
- Если аргумент опущен, функция возвращает тип текущего обрабатываемого входного потока.
Функция возвращает имя кодировки символов или false, если для указанного типа входных данных кодировка не определена.
Простые примеры использования
<?php
// Устанавливаем внутреннюю кодировку
mb_internal_encoding('UTF-8');
// Проверяем кодировку POST-данных
$encoding = mb_http_input('P');
echo $encoding; // Выведет UTF-8, если установлено
?>UTF-8
<?php
// Проверяем кодировку для каждого типа
$types = ['G', 'P', 'C', 'S'];
foreach ($types as $type) {
$enc = mb_http_input($type);
echo "$type: " . ($enc ?: 'Не определена') . "\n";
}
?>G: UTF-8 P: UTF-8 C: UTF-8 S: Не определена
<?php
// Определяем тип текущего входного потока
$currentType = mb_http_input();
echo $currentType; // Например, 'P' при обработке POST-запроса
?>P
Похожие функции в PHP
Определяет кодировку строки. В отличие от mb_http_input(), работает с конкретной строкой, а не с HTTP-входным потоком.
Проверяет, соответствует ли строка указанной кодировке. Полезна для валидации данных.
Преобразует строку из одной кодировки в другую. Применяется при необходимости конвертации данных.
Предпочтения: mb_http_input() используют для определения кодировки входных HTTP-данных на уровне потока. Для анализа отдельных строк выбирают mb_detect_encoding() или mb_check_encoding(). Функция iconv() актуальна при конвертации.
Типичные ошибки
Если данные уже прочитаны (например, через $_POST), функция может не вернуть корректный результат.
<?php
// Некорректный порядок
$data = $_POST['field'];
$enc = mb_http_input('P'); // Может вернуть false
var_dump($enc);
?>bool(false)
<?php
$enc = mb_http_input('X'); // Несуществующий тип
var_dump($enc);
?>bool(false)
При отключенном расширении mbstring функция недоступна.
<?php
if (!function_exists('mb_http_input')) {
echo 'Функция не поддерживается';
}
?>Функция не поддерживается
Изменения в версиях PHP
Функция mb_http_input() присутствует в PHP с версии 4.0.6. Существенных изменений в поведении не было, но в PHP 8 функция всегда возвращает информацию в кодировке UTF-8, если входные данные корректны. В более ранних версиях могла возвращать другие значения в зависимости от конфигурации.
Расширенные примеры
<?php
// Установка обработки входных данных в UTF-8
mb_http_input('UTF-8');
mb_internal_encoding('UTF-8');
// Проверка установленной кодировки для каждого типа
foreach (['G', 'P', 'C'] as $type) {
if (mb_http_input($type)) {
echo "Тип $type: кодировка установлена.\n";
}
}
?>Тип G: кодировка установлена. Тип P: кодировка установлена. Тип C: кодировка установлена.
<?php
// Если кодировка не UTF-8, конвертируем данные
$inputEncoding = mb_http_input('P');
if ($inputEncoding && $inputEncoding !== 'UTF-8') {
// Конвертируем $_POST в UTF-8
foreach ($_POST as $key => $value) {
$_POST[$key] = mb_convert_encoding($value, 'UTF-8', $inputEncoding);
}
}
?><?php
// Запись информации о кодировке в лог
$logEntry = date('Y-m-d H:i:s') . ' - ';
$enc = mb_http_input('I');
$logEntry .= $enc ? "Кодировка входных данных: $enc" : "Кодировка не определена";
file_put_contents('encoding.log', $logEntry . PHP_EOL, FILE_APPEND);
?><?php
// Сравнение кодировок GET и POST
$getEnc = mb_http_input('G');
$postEnc = mb_http_input('P');
if ($getEnc !== $postEnc) {
echo 'Кодировки GET и POST различаются.';
}
?><?php
// Фильтрация данных с учетом кодировки
$encoding = mb_http_input('P');
$filters = [
'name' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL
];
$filteredData = filter_input_array(INPUT_POST, $filters);
// Дальнейшая обработка с учетом $encoding
?>Аналоги в других языках
Mb http input в Python
В Python кодировка HTTP-запроса определяется через заголовок Content-Type или с помощью библиотек (например, requests). Прямого аналога нет.
import requests
r = requests.get('http://example.com')
encoding = r.encoding
print(encoding) # 'utf-8'utf-8
В Node.js кодировка устанавливается при парсинге тела запроса (например, в Express).
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true })); // для данных формы
// Кодировка по умолчанию UTF-8Mb http input в MySQL
Установка кодировки соединения с базой данных.
SET NAMES 'utf8mb4';Отличие от PHP: в других языках кодировка обычно управляется на уровне фреймворка или библиотеки, а не отдельной функцией.