Функция iri_to_uri
Функция iri_to_uri применяется для преобразования строки IRI (Internationalized Resource Identifier) в ASCII-URI (Uniform Resource Identifier) в соответствии с правилами, описанными в RFC 3987. Она кодирует не-ASCII символы в процентное представление, используя UTF-8 кодировку, и обрабатывает специальные символы, такие как пробелы и знаки пунктуации. Входной параметр принимает строку, содержащую IRI, и возвращает строку в формате ASCII-URI.
Синтаксис
from django.utils.encoding import iri_to_uri
iri_to_uri(iri_string)
Пример
Давайте преобразуем IRI-строку с кириллическими символами в URI:
from django.utils.encoding import iri_to_uri
iri_string = "https://example.com/путь/к/странице"
res = iri_to_uri(iri_string)
print(res)
Результат выполнения кода:
"https://example.com/%D0%BF%D1%83%D1%82%D1%8C/%D0%BA/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5"
Как видно из примера, кириллические символы были преобразованы в процентное представление, соответствующее их UTF-8 кодировке.
Пример
Преобразуем IRI с пробелами и специальными символами:
from django.utils.encoding import iri_to_uri
iri_string = "https://example.com/search?q=привет мир&lang=ru"
res = iri_to_uri(iri_string)
print(res)
Результат выполнения кода:
"https://example.com/search?q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80&lang=ru"
В этом примере пробел был преобразован в %20, а кириллические символы в параметре запроса закодированы в процентное представление.
Пример
Преобразуем URL с уже существующими процентными последовательностями:
from django.utils.encoding import iri_to_uri
iri_string = "https://example.com/%D0%BF%D1%83%D1%82%D1%8C/новый"
res = iri_to_uri(iri_string)
print(res)
Результат выполнения кода:
"https://example.com/%D0%BF%D1%83%D1%82%D1%8C/%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9"
Функция корректно обрабатывает уже существующие процентные последовательности, преобразуя только не-ASCII символы в части "новый".
Пример
Используем функцию в контексте построения полного URL:
from django.utils.encoding import iri_to_uri
from django.contrib.sites.models import Site
site = Site.objects.get_current()
base_url = "https://" + site.domain
path = "/каталог/товары"
url = base_url + iri_to_uri(path)
print(url)
Результат выполнения кода:
"https://example.com/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3/%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B"
Этот пример демонстрирует практическое применение функции при формировании URL с не-ASCII путями.
Смотрите также
-
функция
uri_to_iri,
которая выполняет обратное преобразование -
функция
slugify,
которая преобразует строку в URL-совместимый слаг -
функция
force_str,
которая преобразует объекты в строковое представление -
функция
smart_str,
которая возвращает строковое представление объекта