正規化対象のURLにクエリパラメータとURLフラグメントが両方とも含まれる場合、正規化時に順序が崩れて不正なURLになってしまうバグの修正
refs #56
This commit is contained in:
		@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user