我在显示带有引号的网址链接时遇到问题,尽管stackoverflow上有大量示例,但无法找到解决方案!这是我在我的数据库中存储的确切字符串(显示Adelaide Antartica)
https://www.google.com/maps/place/67%C2%B007' 27.3%22S + 68%C2%B008' 56.0%22W / @ - 67.1447827,-68.3886741,71373m /数据= 3M1 1E3 4M5 3M4 1s0x0!!!:为0x0!8平方米!3D-67.124258!4D-68.148903
当我尝试将其放入href时,它会链接到...
https://www.google.com/maps/place/67%C2%B007(即在第一个单引号处打破)
但我尝试使用href =" encodeURI(theLink)"或者href =" encodeURIComponent(theLink)"它链接到同一个东西(我甚至尝试过解码选项,以防我以错误的方式思考它并遇到同样的问题)。
有没有人建议以最佳方式前往此处?我甚至试过了被弃用的"逃避"功能也不会为我工作。谢谢你的任何想法!
(有趣的是,因为我写这篇文章,我看到即使Stack Overflow的链接也以完全相同的方式被打破 - 也许它甚至不可能?!)
编辑:根据Clemzd的要求 - 我使用d3构建链接,所以这样做......anElement.append("text").html("<a href='" + myData[i].url + "'> a link name </a>");
除了我是否使用encodeURI(myData [i] .url)之外,还可以使用单引号链接一切,
答案 0 :(得分:2)
使用单引号来分隔href
属性的值,以便该值不能包含未转义的单引号。这是HTML标记编码的问题,而不是URL编码。
您可以反转使用单引号和双引号(编码的网址不能包含双引号,但它们可以包含单引号)或将URL中的单引号替换为'
这样的字符实体。 %27
的网址编码也可以,但这不是encodeURIComponent
的标准编码。
答案 1 :(得分:1)
有很多方法可以解决您的问题。所有你需要知道的是,如果你的输入可能包含'那么你必须逃避这个角色。否则你会得到像anElement.append("text").html("<a href='" + https://www.google.com/maps/place/'link + "'> a link name </a>");
这样的东西因为'。
如果您确定您的链接永远不会包含“然后更改您的代码并使用”而是作为连接运算符。
如果没有,您可以在服务器端或客户端转义。例如,在客户端,您可以执行以下操作:
function escapeJavascript(input){
return input.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f");
}
然后像这样使用它:anElement.append("text").html("<a href='" + escapeJavascript(myData[i].url) + "'> a link name </a>");