Первоначально у меня была функция с регулярным выражением, которая удаляла все не буквенно-цифровые символы и _, и она работала нормально, как и предполагалось.

func titleToURL(title string) string {
    threadURL := strings.Replace(title, " ", "_", -1)
    pattern := regexp.MustCompile(`[^a-zA-Z\d_]`)
    threadURL = pattern.ReplaceAllString(threadURL, "")
    if len(threadURL) > urlMax {
        threadURL = threadURL[0:urlMax]
    }
    return threadURL
}

Но позже я хотел, чтобы URL-адрес содержал символы utf-8, такие как 香港 и т. Д. Поэтому я удалил замену регулярного выражения, чтобы такие символы были разрешены. Но после этого, когда передается такой символ, как [или], URL-адрес показывает все эти символы% и еще много чего. Я хочу, чтобы эти URL-адреса были удобочитаемыми, поскольку они не предназначены для передачи данных.

Короче говоря, я хочу, чтобы URL-адреса выглядели как text_test_url или chinese_香港, а не %3F_%5BM%5D

Какие символы я должен удалить для этого? Если возможно, укажите регулярное выражение.

0
mismaah 14 Сен 2020 в 04:58

1 ответ

Лучший ответ

MDN перечисляет символы, которые подвергаются процентному кодированию:

  • :
  • /
  • ?
  • #
  • [
  • ]
  • @
  • !
  • $
  • &
  • `
  • (
  • )
  • *
  • +
  • ,
  • ;
  • =
  • %

Таким образом, ваше регулярное выражение просто проверяет эти символы (при необходимости экранируя их).

2
DylanSp 17 Сен 2020 в 03:29