Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.04.2020, 18:09
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Запрет на кодирование ссылки
Всем привет!

Есть домен в зоне .рф и естественно ссылка тоже состоит из кириллицы, пример:

Код:
https://сайт.рф/каталог
но при копировании, браузер кодирует кириллицу в ссылке и в итоге получаем это:

Код:
https://сайт.рф/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3
Можно ли запретить ему это делать? Или может есть другие способы решить эту проблему. Как я понял js не имеет доступа к буферу клиента. Да и событие в системном окне тоже не получиться отловить.

В общем, как решить эту проблему?
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2020, 19:25
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

Сообщение от arkadii_parovozov
как решить эту проблему?
А в чем, собственно, проблема? Не красиво?
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2020, 19:42
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Сообщение от Nexus Посмотреть сообщение
А в чем, собственно, проблема? Не красиво?
ну да. Плюс ко всему бывает что нужно скопировать и вставить в таблицу (ексель например) в виде текста, а там километр непонятных символов. Не руками же перепечатывать. Это один из примеров, а так еще если поделится ссылкой, то некоторые могут просто не перейти, так как испугаются непонятного текста.
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2020, 19:55
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Используйте латиницу для урлов, а лучше вообще смените домен на .ru или другую зону на латинице.

Кириллические домены многие уже к 2012 году отлюбили. Ни мыла вам, ни нормальной ссылки. Заморочек больше чем выхлопа. Я серьёзно, обдумайте вариант смены, ну или мучайтесь с этим дальше.
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2020, 20:32
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от arkadii_parovozov
Как я понял js не имеет доступа к буферу клиента
Для этого есть Clipboard API, а вам нужен метод — navigator.clipboard.writeText (для поддержки Safari я вам рекомендую использовать polyfill)

Сообщение от arkadii_parovozov
но при копировании, браузер кодирует кириллицу в ссылке и в итоге получаем это
Всё правильно, в URL кодируются многие символы, чтобы адрес ссылки мог быть представим в разных контекстах. Это полностью рабочий адрес ссылки.

В 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), то я вам рекомендую использовать последний пример. Сторонний код вы можете скачать к себе в проект.

Сообщение от MC-XOBAHCK
Используйте латиницу для урлов, а лучше вообще смените домен на .ru или другую зону на латинице.
Все браузеры уже давно поддерживают IRI, если только речь не о старых (ну о реально старых) браузерах!

Последний раз редактировалось Malleys, 22.04.2020 в 20:48.
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2020, 20:47
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Malleys
се браузеры уже давно поддерживают IRI, если только речь не о старых (ну о реально старых) браузерах!
Я не о браузерах имел ввиду, а о неудобстве кириллических доменов и урлов.

Насколько я понял, человек спрашивает о копировании урла из браузерной строки.
Ответить с цитированием
  #7 (permalink)  
Старый 22.04.2020, 20:58
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от MC-XOBAHCK
неудобстве кириллических доменов и урлов.
Причём тут только кириллица? IRI предполагает использование всего Unicode, что конечно очень удобно, поскольку тогда любой адрес легко читаем.

А неудобство возникает из-за того, что в некоторых местах до сих пор используется 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 удобен и для чтения и для разбора...

Последний раз редактировалось Malleys, 22.04.2020 в 22:42.
Ответить с цитированием
  #8 (permalink)  
Старый 22.04.2020, 21:56
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

URI и IRI это в настройках сервера?
URI встречаю постоянно (наверное в документациях), но честно - даже не задумываюсь что это такое. Про IRI наверное сегодня первый раз от вас услышал.
Ответить с цитированием
  #9 (permalink)  
Старый 23.04.2020, 09:04
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Malleys, спасибо большое за развернутый ответ с примерами. Но к сожалению речь идет именно о копировании из адресной строки браузера.
Ответить с цитированием
  #10 (permalink)  
Старый 23.04.2020, 09:20
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Странно,
Когда я ввожу в адресную строку
Код:
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

Последний раз редактировалось voraa, 23.04.2020 в 09:24.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклическая проверка ссылки biryukovm AJAX и COMET 3 25.03.2019 11:52
Картинка вместо текста ссылки _marisha Общие вопросы Javascript 10 01.02.2019 08:46
Нужно модифицировать ссылки на странице Chmil Элементы интерфейса 7 02.08.2018 00:22
JS и неработающие ссылки Sovka22 Javascript под браузер 1 13.01.2018 15:37
Внутри разворачивающегося по клику DIVа не работают ссылки JavaScriptNoob Элементы интерфейса 2 17.11.2015 00:01