Mb parse str: примеры (PHP)
mb_parse_str(string $string, array &$result = ?): boolФункция mb_parse_str разбирает строку, закодированную для передачи данных, и присваивает значения переменным. Это многобайтовая версия функции parse_str, корректно обрабатывающая строки в многобайтовых кодировках, таких как UTF-8.
Используется для обработки данных, переданных через строку запроса (например, в URL), когда данные содержат символы, выходящие за пределы ASCII. Функция особенно полезна при работе с многобайтовыми кодировками, где стандартная функция может некорректно интерпретировать символы.
- string $string - обязательный. Входная строка для разбора.
- array|null &$result - необязательный. Если аргумент передан, то результат разбора помещается в этот массив, а не создает отдельные переменные. По умолчанию null.
Возвращает true в случае успешного выполнения.
<?php
$str = 'name=%D0%98%D0%B2%D0%B0%D0%BD&age=30';
mb_parse_str($str, $result);
print_r($result);
?>Array
(
[name] => Иван
[age] => 30
)<?php
$str = 'city=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&country=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F';
mb_parse_str($str);
echo $city;
?>Москва
<?php
$str = 'user%5Bname%5D=%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B5%D0%B9&user%5Bage%5D=25';
mb_parse_str($str, $output);
print_r($output);
?>Array
(
[user] => Array
(
[name] => Алексей
[age] => 25
)
)- parse_str - стандартная функция для разбора строк. Не поддерживает многобайтовые кодировки корректно. Предпочтительнее использовать mb_parse_str при работе с UTF-8 данными.
- parse_url - извлекает компоненты URL, включая строку запроса. Может использоваться в сочетании с mb_parse_str.
- explode - разбивает строку по разделителю. Подходит для простых случаев, но не обрабатывает URL-кодирование.
- http_build_query - обратная функция, создает строку запроса из массива.
<?php
// Строка в неправильной кодировке
$str = 'name=Иван&age=30'; // Не URL-encoded
mb_parse_str($str, $result);
print_r($result);
?>Array
(
[name] => Иван
[age] => 30
)
// Но это сработает только если настройки кодировки совпадают<?php
$name = 'СтароеИмя';
$str = 'name=НовоеИмя';
mb_parse_str($str); // Перезапишет $name
echo $name;
?>НовоеИмя
<?php
// Пользовательские данные могут перезаписать важные переменные
$str = '_SERVER=malicious';
mb_parse_str($str);
// Это опасно!В PHP 8.0 второй параметр $result стал обязательным. Это изменение направлено на повышение безопасности, чтобы избежать неявного создания переменных.
<?php
// PHP 7 и ниже
mb_parse_str('name=John'); // Создает $name
// PHP 8.0+
mb_parse_str('name=John', $result); // Теперь требуется второй аргумент
?><?php
$str = 'color=%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9&color=%D0%B7%D0%B5%D0%BB%D0%B5%D0%BD%D1%8B%D0%B9';
mb_parse_str($str, $result);
print_r($result);
?>Array
(
[color] => зеленый
// Последнее значение перезаписывает предыдущее
)<?php
$str = 'ids%5B0%5D=1&ids%5B1%5D=2&ids%5B2%5D=3';
mb_parse_str($str, $result);
print_r($result);
?>Array
(
[ids] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)<?php
$url = 'https://example.com/page?name=%D0%9F%D0%B5%D1%82%D1%80&action=view';
$query = parse_url($url, PHP_URL_QUERY);
mb_parse_str($query, $params);
print_r($params);
?>Array
(
[name] => Петр
[action] => view
)<?php
$str = 'text=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%2C%20%D0%BC%D0%B8%D1%80%21';
mb_parse_str($str, $result);
echo $result['text'];
?>Привет, мир!
Mb parse str в Javascript
URLSearchParams - объект для работы с параметрами строки запроса.
const params = new URLSearchParams('name=%D0%98%D0%B2%D0%B0%D0%BD&age=30');
console.log(params.get('name'));Иван
Mb parse str в Python
urllib.parse.parse_qs - функция для разбора строки запроса в словарь.
from urllib.parse import parse_qs
query = 'name=%D0%98%D0%B2%D0%B0%D0%BD&age=30'
parsed = parse_qs(query)
print(parsed['name'][0])Иван
Mb parse str в MySQL
Прямого аналога нет. Для разбора параметров можно использовать строковые функции, но это не типично.