func fixMangledMediaType(mtype, sep string) string {
	if mtype == "" {
		return ""
	}
	parts := strings.Split(mtype, sep)
	mtype = ""
	for i, p := range parts {
		switch i {
		case 0:
			if p == "" {
				// The content type is completely missing. Put in a placeholder.
				p = ctPlaceholder
			}
		default:
			if !strings.Contains(p, "=") {
				p = p + "=" + pvPlaceholder
			}

			// RFC-2047 encoded attribute name
			p = rfc2047AttributeName(p)

			pair := strings.Split(p, "=")
			if strings.Contains(mtype, pair[0]+"=") {
				// Ignore repeated parameters.
				continue
			}

			if strings.ContainsAny(pair[0], "()<>@,;:\"\\/[]?") {
				// attribute is a strict token and cannot be a quoted-string
				// if any of the above characters are present in a token it
				// must be quoted and is therefor an invalid attribute.
				// Discard the pair.
				continue
			}
		}
		mtype += p
		// Only terminate with semicolon if not the last parameter and if it doesn't already have a
		// semicolon.
		if i != len(parts)-1 && !strings.HasSuffix(mtype, ";") {
			mtype += ";"
		}
	}
	if strings.HasSuffix(mtype, ";") {
		mtype = mtype[:len(mtype)-1]
	}
	return mtype
}
func fixMangledMediaType(mtype, sep string) string {
	if mtype == "" {
		return ""
	}
	parts := strings.Split(mtype, sep)
	mtype = ""
	for i, p := range parts {
		switch i {
		case 0:
			if p == "" {
				
				p = ctPlaceholder
			}
		default:
			if !strings.Contains(p, "=") {
				p = p + "=" + pvPlaceholder
			}

			
			p = rfc2047AttributeName(p)

			pair := strings.Split(p, "=")
			if strings.Contains(mtype, pair[0]+"=") {
				
				continue
			}

			if strings.ContainsAny(pair[0], "()<>@,;:\"\\/[]?") {
				
				
				
				
				continue
			}
		}
		mtype += p
		
		
		if i != len(parts)-1 && !strings.HasSuffix(mtype, ";") {
			mtype += ";"
		}
	}
	if strings.HasSuffix(mtype, ";") {
		mtype = mtype[:len(mtype)-1]
	}
	return mtype
}
func fixMangledMediaType ( mtype , sep string ) string { if mtype == " " { return " " } parts := strings . Split ( mtype , sep ) mtype = " " for i , p := range parts { switch i { case 0 : if p == " " { // The content type is completely missing. Put in a placeholder. p = ctPlaceholder } default : if ! strings . Contains ( p , " " ) { p = p + " " + pvPlaceholder } // RFC-2047 encoded attribute name p = rfc2047AttributeName ( p ) pair := strings . Split ( p , " " ) if strings . Contains ( mtype , pair [ 0 ] + " " ) { // Ignore repeated parameters. continue } if strings . ContainsAny ( pair [ 0 ] , " \" \\ " ) { // attribute is a strict token and cannot be a quoted-string // if any of the above characters are present in a token it // must be quoted and is therefor an invalid attribute. // Discard the pair. continue } } mtype += p // Only terminate with semicolon if not the last parameter and if it doesn't already have a // semicolon. if i != len ( parts ) - 1 && ! strings . HasSuffix ( mtype , " " ) { mtype += " " } } if strings . HasSuffix ( mtype , " " ) { mtype = mtype [ : len ( mtype ) - 1 ] } return mtype }
// fixMangledMediaType is used to insert ; separators into media type strings that lack them, and
// remove repeated parameters.
fixMangledMediaType is used to insert ; separators into media type strings that lack them and remove repeated parameters .