code: func NormalizeURLString(u string, f NormalizationFlags) (string, error) {
  	parsed, err := url.Parse(u)
  	if err != nil {
  		return "", err
  	}
  
  	if f&FlagLowercaseHost == FlagLowercaseHost {
  		parsed.Host = strings.ToLower(parsed.Host)
  	}
  
  	// The idna package doesn't fully conform to RFC 5895
  	// (https://tools.ietf.org/html/rfc5895), so we do it here.
  	// Taken from Go 1.8 cycle source, courtesy of bradfitz.
  	// TODO: Remove when (if?) idna package conforms to RFC 5895.
  	parsed.Host = width.Fold.String(parsed.Host)
  	parsed.Host = norm.NFC.String(parsed.Host)
  	if parsed.Host, err = idna.ToASCII(parsed.Host); err != nil {
  		return "", err
  	}
  
  	return NormalizeURL(parsed, f), nil
  }
docs: // NormalizeURLString returns the normalized string, or an error if it can't be parsed into an URL object.
  // It takes an URL string as input, as well as the normalization flags.