Mb http input: примеры (PHP)

Использование функции 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, если для указанного типа входных данных кодировка не определена.

Простые примеры использования

Определение кодировки для POST-данных
<?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-входным потоком.

Проверяет, соответствует ли строка указанной кодировке. Полезна для валидации данных.

iconv()

Преобразует строку из одной кодировки в другую. Применяется при необходимости конвертации данных.

Предпочтения: 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

При отключенном расширении mbstring функция недоступна.

<?php
if (!function_exists('mb_http_input')) {
    echo 'Функция не поддерживается';
}
?>
Функция не поддерживается

Изменения в версиях PHP

Функция mb_http_input() присутствует в PHP с версии 4.0.6. Существенных изменений в поведении не было, но в PHP 8 функция всегда возвращает информацию в кодировке UTF-8, если входные данные корректны. В более ранних версиях могла возвращать другие значения в зависимости от конфигурации.

Расширенные примеры

Автоматическое определение кодировки всех входных данных
Пример php
<?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
<?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
<?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
<?php
// Сравнение кодировок GET и POST
$getEnc = mb_http_input('G');
$postEnc = mb_http_input('P');
if ($getEnc !== $postEnc) {
    echo 'Кодировки GET и POST различаются.';
}
?>
Использование с filter_input_array
Пример php
<?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
JavaScript (Node.js)

В Node.js кодировка устанавливается при парсинге тела запроса (например, в Express).

const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true })); // для данных формы
// Кодировка по умолчанию UTF-8

Mb http input в MySQL

Установка кодировки соединения с базой данных.

SET NAMES 'utf8mb4';

Отличие от PHP: в других языках кодировка обычно управляется на уровне фреймворка или библиотеки, а не отдельной функцией.

PHP mb_http_input function comments

En
Mb http input Detect HTTP input character encoding