对带引号的网址进行编码/ decodeURI

时间:2016-06-21 16:48:47

标签: html url escaping encodeuricomponent decodeuricomponent

我在显示带有引号的网址链接时遇到问题,尽管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)之外,还可以使用单引号链接一切,

2 个答案:

答案 0 :(得分:2)

使用单引号来分隔href属性的值,以便该值不能包含未转义的单引号。这是HTML标记编码的问题,而不是URL编码。

您可以反转使用单引号和双引号(编码的网址不能包含双引号,但它们可以包含单引号)或将URL中的单引号替换为&#39;这样的字符实体。 %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>");