Функция iri_to_uri

Функция iri_to_uri применяется для преобразования строки IRI (Internationalized Resource Identifier) в ASCII-URI (Uniform Resource Identifier) в соответствии с правилами, описанными в RFC 3987. Она кодирует не-ASCII символы в процентное представление, используя UTF-8 кодировку, и обрабатывает специальные символы, такие как пробелы и знаки пунктуации. Входной параметр принимает строку, содержащую IRI, и возвращает строку в формате ASCII-URI.

Синтаксис

pythonfrom django.utils.encoding import iri_to_uri

iri_to_uri(iri_string)

Пример

Давайте преобразуем IRI-строку с кириллическими символами в URI:

pythonfrom django.utils.encoding import iri_to_uri

iri_string = "https://example.com/путь/к/странице"
res = iri_to_uri(iri_string)
print(res)

Результат выполнения кода:

python"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 с пробелами и специальными символами:

pythonfrom django.utils.encoding import iri_to_uri

iri_string = "https://example.com/search?q=привет мир&lang=ru"
res = iri_to_uri(iri_string)
print(res)

Результат выполнения кода:

python"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 с уже существующими процентными последовательностями:

pythonfrom 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)

Результат выполнения кода:

python"https://example.com/%D0%BF%D1%83%D1%82%D1%8C/%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9"

Функция корректно обрабатывает уже существующие процентные последовательности, преобразуя только не-ASCII символы в части "новый".

Пример

Используем функцию в контексте построения полного URL:

pythonfrom 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)

Результат выполнения кода:

python"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,
    которая возвращает строковое представление объекта