public function canonicalize() { $this->path = preg_replace_callback('#[^!$&\'()*+,/:;=@%]+#', function ($m) { return rawurlencode($m[0]); }, self::unescape($this->path, '%/')); $this->host = strtolower($this->host); return $this; }