我在显示指向URL的链接中带有引号的链接很难,尽管在stackoverflow上有很多示例,但仍无法找到解决方案!这是我存储在数据库中的精确字符串(显示Adelaide Antartica)
https://www.google.com/maps/place/67°07'27.3"S 68°08'56.0"2W/@-67.1447827,67.1447827,68.38888886741,71373ME!1E3!4M5!3M4!1S0X0:0x0!8M2!3D-67.124258!4D-68.148903
当我尝试将其放入HREF中时,它链接到...
https://www.google.com/maps/place/67°07(即在第一个单一引用中休息)
但我尝试使用href =" encodeuri(thelink)"或href =" encodeuricomponent(thelink)"它链接到同一件事(如果我以错误的方式考虑并拥有decode选项,并且使用了解码选项。同样的问题)。
有没有人建议在此处进行最佳方法?我什至尝试了弃用的"逃生"功能,这也对我不起作用。完全感谢您的想法!
(P.S。很有趣,因为我写这篇文章,我也看到,即使堆栈溢出的链接都以完全相同的方式打破了 - 也许甚至是不可能的?!)
编辑:按照Clemzd的要求 - 我正在使用D3来构建链接,所以这样做...
anElement.append("text").html("<a href='" + myData[i].url + "'> a link name </a>");
在所有内容上都非常有用,但是无论我是否做encodeuri(mydata [i] .url),
您使用单个引号来界定 href
属性的值,以便该值不能包含未塑造的单引号。这是HTML标记编码的问题,而不是URL编码。
您可以扭转对单引号和双引号的使用(编码URL不能包含双引号,但可以包含单引号),也可以用诸如'
之类的字符实体替换URL中的单个引号。%27
编码的URL也可以工作,但这不是encodeURIComponent
的标准编码。
有很多方法可以解决您的问题。您需要知道的是,如果您的输入可能包含',那么您必须逃脱此角色。否则,您将获得类似anElement.append("text").html("<a href='" + https://www.google.com/maps/place/'link + "'> a link name </a>");
的东西,因为'。
如果您确定您的链接永远不会包含"然后更改代码并使用"作为condeneion操作员。
如果没有,您可以在服务器端或客户端逃脱。例如,在客户端您可以做:
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>");