Составление URL по массиву параметров

PHP 11.09.21 11.09.21 95
Бесплатные курсына главную сниппетов

Составление URL по массиву параметров. (Файл lib/http_build_url.php)

<?php ## Составление URL по массиву параметров // Составляет URL по частям из массива $parsed. // Функция обратна к parse_url(). function http_build_url($parsed) { if (!is_array($parsed)) return false; // Задан протокол? if (isset($parsed['scheme'])) { $sep = (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'); $url = $parsed['scheme'] . $sep; } else { $url = ''; } // Заданы пароль или имя пользователя? if (isset($parsed['pass'])) { $url .= "$parsed[user]:$parsed[pass]@"; } elseif (isset($parsed['user'])) { $url .= "$parsed[user]@"; } // QUERY_STRING представлена в виде массива? if (@!is_scalar($parsed['query'])) { // Преобразуем в строку. $parsed['query'] = http_build_query($parsed['query']); } // Дальше составляем URL if (isset($parsed['host'])) $url .= $parsed['host']; if (isset($parsed['port'])) $url .= ":".$parsed['port']; if (isset($parsed['path'])) $url .= $parsed['path']; if (isset($parsed['query'])) $url .= "?".$parsed['query']; if (isset($parsed['fragment'])) $url .= "#".$parsed['fragment']; return $url; } ?>

Пример: как можно модифицировать строковое представление URL, каким бы сложным оно ни было.
Модификация части URL.

<?php ## Модификация части URL без изменения других его участков require_once "lib/http_build_url.php"; // URL, с которым будем работать $url = "http://user@example.com:80/path?arg=value#anchor"; // Другие примеры, которые вы можете испробовать // $url = "/path?arg=value#anchor"; // $url = "thematrix.com"; // $url = "http://thematrix.com/#top"; # без '/' перед '#' не работает! // Разбираем URL на части $parsed = parse_url($url); // Разбираем одну из частей, QUERY_STRING, на элементы массива parse_str(@$parsed['query'], $query); // Добавляем новый элемент в массив QUERY_STRING $query['names']['read'] = 'tom'; // Собираем QUERY_STRING назад из массива $parsed['query'] = http_build_query($query); // Создаем результирующий URL $newurl = http_build_url($parsed); // Выводим результаты работы echo "Старый URL: $url<br>"; echo "Новый: $newurl"; ?>

Результат работы программы таков:
Старый URL:
http://user@example.com:80/path?arg=value#anchor
Новый:
http://user@example.com:80/path?arg=value&names[read]=tom#anchor

Как видите, нам удалось добавить дополнительный параметр в URL, не задумываясь особенно, что в нем уже могут быть другие параметры (в том числе сложные, например, массивы), а также что в URL может отсутствовать та или иная часть (например, имя хоста).

 

на главную сниппетов
Курсы