正規化対象のURLにクエリパラメータとURLフラグメントが両方とも含まれる場合、正規化時に順序が崩れて不正なURLになってしまうバグの修正
refs #56
This commit is contained in:
parent
626c85c07d
commit
6d66425fc9
@ -52,12 +52,25 @@ class Formatter
|
|||||||
$url = preg_replace('~/#!/~u', '/', $url);
|
$url = preg_replace('~/#!/~u', '/', $url);
|
||||||
|
|
||||||
// Sort query parameters
|
// Sort query parameters
|
||||||
$query = parse_url($url, PHP_URL_QUERY);
|
$parts = parse_url($url);
|
||||||
if (!empty($query)) {
|
if (!empty($parts['query'])) {
|
||||||
$url = str_replace_last('?' . $query, '', $url);
|
// Remove query parameters
|
||||||
parse_str($query, $params);
|
$url = str_replace_last('?' . $parts['query'], '', $url);
|
||||||
|
if (!empty($parts['fragment'])) {
|
||||||
|
// Remove fragment identifier
|
||||||
|
$url = str_replace_last('#' . $parts['fragment'], '', $url);
|
||||||
|
} else {
|
||||||
|
// "http://example.com/?query#" の場合 $parts['fragment'] は unset になるので、個別に判定して除去する必要がある
|
||||||
|
$url = preg_replace('/#\z/u', '', $url);
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_str($parts['query'], $params);
|
||||||
ksort($params);
|
ksort($params);
|
||||||
|
|
||||||
$url = $url . '?' . http_build_query($params);
|
$url = $url . '?' . http_build_query($params);
|
||||||
|
if (!empty($parts['fragment'])) {
|
||||||
|
$url .= '#' . $parts['fragment'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $url;
|
return $url;
|
||||||
|
Loading…
Reference in New Issue
Block a user