用引号编码/decodeuri为URL



我在显示指向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不能包含双引号,但可以包含单引号),也可以用诸如&#39;之类的字符实体替换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>");

最新更新