Запретить `document.execCommand("copy")` заменить амперсанды

У меня есть инструмент, который генерирует URL-адреса, и кнопка для копирования сгенерированного URL-адреса в буфер обмена. Эта функция успешно копирует мой URL:

function copyUrlToClipboard() {
  var $temp = $("<input>");
  $("body").append($temp);
  $temp.val(myUrl).select();
  document.execCommand("copy");
  $temp.remove();
}

Однако в скопированном URL-адресе символы амперсанда заменяются на &amp%3B, Например, URL

mysite.com/?utm_source=se&utm_medium=foo

становится

mysite.com/?utm_source=se&amp%3Butm_medium=foo

К сожалению, я использую аналитику сегмента / амплитуды вниз по течению, которая не может извлечь параметры из этого URL.

Почему это происходит? Есть ли способ изменить поведение copyили какую-то постобработку, которую я могу сделать для элемента буфера обмена? Если это не удастся, кто-нибудь знает, можно ли сконфигурировать сегмент, чтобы он был умнее при извлечении параметров?

Обновление:

После расследования выясняется, что $temp.val() отвечает за замену & с &amp; (Я не уверен, что термин для этого - очистить его?), А затем после вставки URL в браузере ; очищается как %3B, Но я не понимаю почему val() выполняется очистка, есть ли свойство / атрибут, который я могу установить для моего временного элемента, или другой тип элемента для использования?

1 ответ

Решение

Я понял это благодаря комментариям предложений. Это было потому что myUrl исходил из переменной шаблона django:

{{ original.my_url }}

Как оказалось, мне пришлось пометить эту переменную как безопасную:

{{ original.my_url | safe }}

Это теперь копирует URL без изменений. Спасибо за предложения!

Другие вопросы по тегам