Как мне нормализовать этот 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), каково здесь ожидаемое поведение?