Функция 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&param2=value2&param3";

Вызов функции:
 
$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&param[]=value2.

Безопасность:
В отличие от parse_str(), функция не изменяет глобальные переменные. Это делает её более безопасной, так как не возникает риска случайного перезаписи существующих данных.

5. Вывод:
Функция cot_parse_str() предназначена для разбора простых строк запросов в массив ключей и значений. Она полезна в ситуациях, где не требуется сложная обработка данных или автоматическое декодирование символов. Её использование упрощает и ускоряет работу с параметрами запросов, исключая лишние операции, которые могут быть избыточны в конкретных сценариях.

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 23.01.2025 20:12
  • Последнее обновление: 23.01.2025 20:12