Запрет на кодирование ссылки
Всем привет!
Есть домен в зоне .рф и естественно ссылка тоже состоит из кириллицы, пример: Код:
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, время: 22:36. |