Запрет на кодирование ссылки
Всем привет!
Есть домен в зоне .рф и естественно ссылка тоже состоит из кириллицы, пример: Код:
https://сайт.рф/каталог Код:
https://сайт.рф/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3 В общем, как решить эту проблему? |
Цитата:
|
Цитата:
|
Используйте латиницу для урлов, а лучше вообще смените домен на .ru или другую зону на латинице.
Кириллические домены многие уже к 2012 году отлюбили. Ни мыла вам, ни нормальной ссылки. Заморочек больше чем выхлопа. Я серьёзно, обдумайте вариант смены, ну или мучайтесь с этим дальше. |
Цитата:
Цитата:
В JS link.href возвращает URI независимо от того, как в разметке представлен атрибут href — как URI, или как IRI (т. е. в данном примере — https://xn--80aswg.xn--p1ai/%D0%BA%D...BB%D0%BE%D0%B3) Если у вас в разметке адрес представлен в атрибуте href как IRI, то вам достаточно его прочитать и записать в буфер обмена. В примере нажатие на кнопку запускает процесс копирования... <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.8.6/clipboard-polyfill.js"></script> <a id="link" href="https://сайт.рф/каталог">сайт.рф/каталог</a> <script> const button = document.createElement("button"); button.textContent = "Копировать адрес ссылки"; button.addEventListener("click", event => { const iri = document.querySelector("a#link").getAttribute("href"); clipboard.writeText(iri).then(() => { alert('Ccылка скопирована! ' + iri); }); }); document.body.appendChild(button); </script> Если же у вас в разметке адрес представлен в атрибуте href как URI, то вам нужна сторонняя библиотека для того, чтобы перевести URI в IRI. <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.8.6/clipboard-polyfill.js"></script> <script src="https://unpkg.com/uri-js@4.2.2/dist/es5/uri.all.min.js"></script> <a id="link" href="https://xn--80aswg.xn--p1ai/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3">сайт.рф/каталог</a> <script> const button = document.createElement("button"); button.textContent = "Копировать адрес ссылки"; button.addEventListener("click", event => { const iri = URI.serialize(URI.parse(document.querySelector("a#link").href), { iri: true }); clipboard.writeText(iri).then(() => { alert('Ccылка скопирована! ' + iri); }); }); document.body.appendChild(button); </script> Если вы не уверены, что у вас используется в атрибуте href (URI или IRI), то я вам рекомендую использовать последний пример. Сторонний код вы можете скачать к себе в проект. Цитата:
|
Цитата:
Насколько я понял, человек спрашивает о копировании урла из браузерной строки. |
Цитата:
А неудобство возникает из-за того, что в некоторых местах до сих пор используется URI, когда полностью прекратится использование URI и произойдёт переход на IRI, то такие проблемы исчезнут. Даже если домен не содержит символы Unicode, которых нет в ASCII, такие символы могут встречаться в query string. Сравните... URI — https://www.google.com/search?q=%D0%...%D0%B8% D0%B5 IRI — https://www.google.com/search?q=программирование Конечно же вариант IRI удобен и для чтения и для разбора... |
URI и IRI это в настройках сервера?
URI встречаю постоянно (наверное в документациях), но честно - даже не задумываюсь что это такое. Про IRI наверное сегодня первый раз от вас услышал. |
Malleys, спасибо большое за развернутый ответ с примерами. Но к сожалению речь идет именно о копировании из адресной строки браузера.
|
Странно,
Когда я ввожу в адресную строку Код:
https://сайт.рф/каталог При копировании из Файрфокса получаю Код:
https://сайт.рф/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3 Код:
https://xn--80aswg.xn--p1ai/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3 |
Часовой пояс GMT +3, время: 01:25. |