Использование PHP для разделения URL
Я создаю прокси-сервер PHP, где он принимает URL-адрес и подтверждает, что он находится в моем списке серверов.
При импорте URL-адреса из приложения я столкнулся с проблемой, когда мне потребовалось 2 тега синтаксического анализатора. мне нужно, чтобы он разделился вдоль "\?" тег, а также строка, в моем случае, "экспорт?"
я использую preg для первого тега. Принимает ли это строки, как мой тег экспорта, или есть какой-то другой способ сделать это?
Пожалуйста, дайте мне знать, как это сделать, или если у вас есть дополнительные вопросы.
4 ответа
Как уже было сказано в комментариях ircmaxell, в PHP уже есть функция для анализа URL: parse_url
,
И когда у вас есть путь URL (я предполагаю, что ваш export?
суффикс пути плюс индикатор запроса), вы можете использовать explode
разбить путь на его сегменты:
$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', $path);
Затем вы можете получить последний сегмент пути с одним из следующих:
end($segments)
$segments[count($segments)-1]
И чтобы справиться с косой чертой, вы можете использовать rtrim($path, '/')
удалить их.
Все вместе:
$url = 'http://www.example.com/subfolders/export?';
$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', rtrim($path, '/'));
echo end($segments);
Регулярное выражение должно сработать, что-то вроде приведенного ниже будет работать. Это то, что Django использует в своем диспетчере URL
r'^export/$'
Эй, ребята, в итоге я использовал explode, который искал строку (export?), А затем я использовал команду preg split для поиска \?. это дало мне то, что я искал. Спасибо, парни.
Регулярные выражения - это совпадения строк, которые также могут включать совпадения переменных. Так как ?
входит в ?
Вы должны сделать свой сплит дважды. Однажды на export?
первый и второй проход на каждом из тех, у кого ?
как ваш разделитель. Как написано ниже, вы просто разбиваетесь на одну из двух разных строк.
$first = preg_split('export\?', ...);
for ($first) {
array_push ($second,preg_split('\?', ...)');
}
Это не совсем правильный PHP, но я надеюсь, что это достаточно близкий псевдокод.