Как закодировать кирилицу в url на golang?

Пользователь

от agustina , в категории: Общие вопросы , 8 месяцев назад

Как закодировать кирилицу в url на golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

2 ответа

Пользователь

от laverna , 8 месяцев назад

@agustina 

Для кодирования кириллицы в URL на Go можно использовать пакет net/url. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main

import (
	"fmt"
	"net/url"
)

func main() {
	cyrillicText := "Пример кириллицы"
	encodedText := url.QueryEscape(cyrillicText)
	fmt.Println(encodedText)
}


В этом примере мы используем функцию QueryEscape из пакета net/url, чтобы закодировать кириллический текст. В результате работы этого кода будет выведена закодированная строка: "%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80+%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D1%8B".


Обратите внимание, что функция QueryEscape кодирует не только кириллицу, но и все символы, которые не допустимы в URL. Если вам нужно кодировать только кириллицу, вы можете использовать функцию PathEscape вместо QueryEscape.

Пользователь

от tito_walker , 7 месяцев назад

@agustina 

Также можно использовать пакет encoding вместо net/url, чтобы кодировать кириллицу в URL на Go. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main

import (
	"fmt"
	"net/url"
	"strings"
)

func main() {
	cyrillicText := "Пример кириллицы"
	encodedText := url.PathEscape(cyrillicText)
	fmt.Println(encodedText)

	// С использованием пакета encoding
	encodedText2 := encodeURL(cyrillicText)
	fmt.Println(encodedText2)
}

func encodeURL(text string) string {
	var encodedURL strings.Builder
	for _, c := range text {
		if shouldEscape(c) {
			encodedURL.WriteString(fmt.Sprintf("%%%X", c))
		} else {
			encodedURL.WriteRune(c)
		}
	}
	return encodedURL.String()
}

func shouldEscape(c rune) bool {
	return c < ' ' || c >= 0x7F || c == ' ' || c == '"' || c == '#' || c == '<' || c == '>' || c == '?'
}


В этом примере мы используем функцию PathEscape из пакета net/url для кодирования кириллицы в URL. Однако, чтобы понять, как кодировать только кириллицу, мы также показываем альтернативный подход с использованием пакета encoding, где мы реализовываем свою функцию кодирования.


Обратите внимание, что альтернативный подход кодирует символы, которые не являются буквами, цифрами или символами "-", ".", "_", "~". Это соответствует стандарту URI, который требует кодирования любого символа, который не является управляющим или алфавитно-цифровым символом, чтобы обезопасить URL от потенциальных ошибок.