防止 `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 中,& 字符被替换为 &%3B
。例如,url
mysite.com/?utm_source=se&utm_medium=foo
变成
mysite.com/?utm_source=se&%3Butm_medium=foo
不幸的是,我在下游使用 segment/amplitude 分析,无法从此 URL 中提取参数。
为什么会这样?有没有办法改变 copy
的行为,或者我可以在剪贴板项目上做一些 post 处理?如果做不到这一点,有人知道是否可以将段配置为更智能地提取参数吗?
更新:
经调查,似乎 $temp.val()
负责将 &
替换为 &
(我不确定这个术语是什么 - 清理它?)然后在浏览器中粘贴 url,;
被清理为 %3B
。但我不明白为什么要清理 val()
,是否可以在我的临时元素上设置 property/attribute,或者使用不同类型的元素?
多亏了评论的建议我弄明白了。这是因为 myUrl
来自 django 模板变量:
{{ original.my_url }}
事实证明我必须将这个变量标记为 safe:
{{ original.my_url | safe }}
这现在复制 url 而不加修改。谢谢你的建议!
我有一个生成 URL 的工具,以及一个用于将生成的 URL 复制到剪贴板的按钮。此函数确实成功复制了我的 URL:
function copyUrlToClipboard() {
var $temp = $("<input>");
$("body").append($temp);
$temp.val(myUrl).select();
document.execCommand("copy");
$temp.remove();
}
但是,在复制的 URL 中,& 字符被替换为 &%3B
。例如,url
mysite.com/?utm_source=se&utm_medium=foo
变成
mysite.com/?utm_source=se&%3Butm_medium=foo
不幸的是,我在下游使用 segment/amplitude 分析,无法从此 URL 中提取参数。
为什么会这样?有没有办法改变 copy
的行为,或者我可以在剪贴板项目上做一些 post 处理?如果做不到这一点,有人知道是否可以将段配置为更智能地提取参数吗?
更新:
经调查,似乎 $temp.val()
负责将 &
替换为 &
(我不确定这个术语是什么 - 清理它?)然后在浏览器中粘贴 url,;
被清理为 %3B
。但我不明白为什么要清理 val()
,是否可以在我的临时元素上设置 property/attribute,或者使用不同类型的元素?
多亏了评论的建议我弄明白了。这是因为 myUrl
来自 django 模板变量:
{{ original.my_url }}
事实证明我必须将这个变量标记为 safe:
{{ original.my_url | safe }}
这现在复制 url 而不加修改。谢谢你的建议!