Как мне нормализовать этот URL?

URL в вопросе является следующим:

https://www.xing.com/app/user?op=share;url=https%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F&title=Campana%20%26%20Schott%20-%20Deutschland&provider=

Проблемный элемент находится в строке запроса, в частности эта часть:

op=share;url=https%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F

То что у нас тут выглядит как ключик (op) и значение (share), а затем то, что кажется подзапросом, разделенным точкой с запятой (url=https%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F).

Простой скрипт нормализации для тестирования этого:

<?php

$url = 'https://www.xing.com/app/user?op=share;url=https%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F&title=Campana%20%26%20Schott%20-%20Deutschland&provider=';

echo "URL: $url\n";

$query = parse_url($url, PHP_URL_QUERY);

parse_str($query, $unencoded);

echo "Before encoding:\n";

print_r($unencoded);

echo "After encoding:\n";

print_r(http_build_query($unencoded, '', '&',  PHP_QUERY_RFC3986));

echo "\n";

Результаты в:

URL: https://www.xing.com/app/user?op=share;url=https%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F&title=Campana%20%26%20Schott%20-%20Deutschland&provider=
Before encoding:
Array
(
    [op] => share;url=https://www.campana-schott.com/de/de/
    [title] => Campana & Schott - Deutschland
    [provider] => 
)
After encoding:
op=share%3Burl%3Dhttps%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F&title=Campana%20%26%20Schott%20-%20Deutschland&provider=

Как видите, строка, которая началась как

op=share;url=https%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F

теперь преобразован в

op=share%3Burl%3Dhttps%3A%2F%2Fwww.campana-schott.com%2Fde%2Fde%2F

В частности, точка с запятой и знак равенства теперь кодируются в процентах.

Принимая во внимание, что в строке запроса могут присутствовать незакодированные символы (например, см. Определение запроса здесь: https://tools.ietf.org/html/rfc3986), каково здесь ожидаемое поведение?

0 ответов

Другие вопросы по тегам