Функция cot_parse_str в Cotonti
Функция cot_parse_str() разбивает строку запроса (query string) на массив ключей и значений. Она является упрощённой альтернативой встроенной функции PHP
Анализ функции cot_parse_str
1. Тезис:
Функция cot_parse_str() разбивает строку запроса (query string) на массив ключей и значений. Она является упрощённой альтернативой встроенной функции PHP parse_str() и не поддерживает сложные структуры данных, такие как массивы или декодирование специальных символов.
Штатный код функции cot_parse_str в Cotonti
/**
* Splits a query string into keys and values array. In comparison with built-in
* parse_str() function, this doesn't apply addslashes and urldecode to parameters
* and does not support arrays and complex parameters.
*
* @param string $str Query string
* @return array
*/
function cot_parse_str($str)
{
$res = [];
$str = str_replace('&', '&', $str);
foreach (explode('&', $str) as $item) {
if (!empty($item)) {
$tmp = explode('=', $item, 2);
$res[$tmp[0]] = isset($tmp[1]) ? $tmp[1] : null;
}
}
return $res;
}
2. Участок кода и комментарии:
Преобразование символов и начальная подготовка:
$res = [];
$str = str_replace('&', '&', $str);
Пояснение:
Инициализируется пустой массив $res, в который будут сохраняться разобранные параметры.
Используется str_replace('&', '&', $str), чтобы заменить все HTML-сущности & на обычный символ &.
Это важно, так как строки запросов могут использовать & для разделения параметров в HTML.
Разбиение строки запроса на отдельные параметры:
foreach (explode('&', $str) as $item) {
if (!empty($item)) {
$tmp = explode('=', $item, 2);
$res[$tmp[0]] = isset($tmp[1]) ? $tmp[1] : null;
}
}
Пояснение:
Функция explode('&', $str) разбивает строку $str на массив, используя символ & как разделитель.
Каждая часть строки представляет собой отдельный параметр (например, key=value).
Для каждого элемента массива ($item):
Проверяется, что элемент не пустой (!empty($item)).
Строка параметра разбивается на ключ и значение с помощью explode('=', $item, 2).
Параметр 2 ограничивает разбиение на максимум два элемента, что позволяет корректно обработать значения, содержащие символ = (например, key=some=value).
Если значение ($tmp[1]) существует, оно сохраняется в массиве $res под соответствующим ключом ($tmp[0]).
Если значения нет, ключу присваивается null.
Возврат результата:
return $res;
Пояснение:
После обработки всех параметров массив $res возвращается. Этот массив содержит пары ключ-значение, где ключи — это имена параметров, а значения — их соответствующие значения или null, если значение отсутствует.
3. Пример работы функции:
Входная строка запроса:
$query = "param1=value1¶m2=value2¶m3";
Вызов функции:
$result = cot_parse_str($query);
Результат:
$result = [
'param1' => 'value1',
'param2' => 'value2',
'param3' => null // Параметр без значения
];
4. Особенности функции и отличия от parse_str:
Без декодирования символов:
В отличие от parse_str(), эта функция не выполняет автоматическое декодирование символов, таких как %20 (пробел) или + (также пробел). Например, строка key=value%20with%20spaces будет обработана как key => value%20with%20spaces, а не как key => value with spaces.
Без поддержки массивов:
Функция не поддерживает параметры, представляющие массивы, такие как param[]=value1¶m[]=value2.
Безопасность:
В отличие от parse_str(), функция не изменяет глобальные переменные. Это делает её более безопасной, так как не возникает риска случайного перезаписи существующих данных.
5. Вывод:
Функция cot_parse_str() предназначена для разбора простых строк запросов в массив ключей и значений. Она полезна в ситуациях, где не требуется сложная обработка данных или автоматическое декодирование символов. Её использование упрощает и ускоряет работу с параметрами запросов, исключая лишние операции, которые могут быть избыточны в конкретных сценариях.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 23.01.2025 20:12
- Последнее обновление: 23.01.2025 20:12