// Copyright © 2013 Steve Francia . // // Licensed under the Simple Public License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://opensource.org/licenses/Simple-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package helpers import ( "net/url" "regexp" "strings" "unicode" ) var sanitizeRegexp = regexp.MustCompile("[^a-zA-Z0-9./_-]") func MakePath(s string) string { return unicodeSanitize(strings.ToLower(strings.Replace(strings.TrimSpace(s), " ", "-", -1))) } func Urlize(uri string) string { sanitized := MakePath(uri) // escape unicode letters parsedUri, err := url.Parse(sanitized) if err != nil { // if net/url can not parse URL it's meaning Sanitize works incorrect panic(err) } return parsedUri.String() } func Sanitize(s string) string { return sanitizeRegexp.ReplaceAllString(s, "") } func unicodeSanitize(s string) string { source := []rune(s) target := make([]rune, 0, len(source)) for _, r := range source { if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '.' || r == '/' || r == '_' || r == '-' { target = append(target, r) } } return string(target) }