防止 `document.execCommand("copy")` 替换符号

Prevent `document.execCommand("copy")` from replacing ampersands

我有一个生成 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

不幸的是,我在下游使用 segment/amplitude 分析,无法从此 URL 中提取参数。

为什么会这样?有没有办法改变 copy 的行为,或者我可以在剪贴板项目上做一些 post 处理?如果做不到这一点,有人知道是否可以将段配置为更智能地提取参数吗?

更新:

经调查,似乎 $temp.val() 负责将 & 替换为 &amp;(我不确定这个术语是什么 - 清理它?)然后在浏览器中粘贴 url,; 被清理为 %3B。但我不明白为什么要清理 val(),是否可以在我的临时元素上设置 property/attribute,或者使用不同类型的元素?

多亏了评论的建议我弄明白了。这是因为 myUrl 来自 django 模板变量:

{{ original.my_url }}

事实证明我必须将这个变量标记为 safe:

{{ original.my_url | safe }}

这现在复制 url 而不加修改。谢谢你的建议!