0

我在显示带有引号的 URL 的链接时遇到问题,尽管在 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/data=!3m1!1e3! 4m5!3m4!1s0x0:0x0!8m2!3d-67.124258!4d-68.148903

当我尝试将其放入href时,它链接到...

https://www.google.com/maps/place/67%C2%B007(即在第一个单引号处中断)

但是我尝试使用 href="en​​codeURI(theLink)" 或 href="en​​codeURIComponent(theLink)" 它链接到同一个东西(我什至尝试了解码选项,以防我想错了并且遇到了同样的问题) .

有没有人推荐在这里进行的最佳方式?我什至尝试了已弃用的“转义”功能,它对我也不起作用。感谢您的任何想法!

(有趣的是,当我写这篇文章时,我发现即使 Stack Overflow 的链接也以完全相同的方式被破坏了——也许这甚至不可能?!)


编辑:应 Clemzd 的要求 - 我正在使用 d3 来构建链接,所以这样做......

anElement.append("text").html("<a href='" + myData[i].url + "'> a link name </a>");

无论我是否使用 encodeURI(myData[i].url) 都可以很好地处理所有内容,但使用单引号链接

4

2 回答 2

2

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

您可以反转使用单引号和双引号(编码的 URL 不能包含双引号,但它们可以包含单引号)或将 URL 中的单引号替换为字符实体,例如&#39;. URL encoding by%27也可以,但这不是标准编码encodeURIComponent

于 2016-06-21T18:41:40.183 回答
1

有很多方法可以解决您的问题。您只需要知道如果您的输入可能包含 ' 那么您必须转义该字符。否则你会得到类似anElement.append("text").html("<a href='" + https://www.google.com/maps/place/'link + "'> a link name </a>");That can't be parsed because of the '.

如果您确定您的链接永远不会包含“,请更改您的代码并使用” 作为连接运算符。

如果没有,您可以在服务器端或客户端转义 '。例如在客户端你可以这样做:

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>");

于 2016-06-21T22:03:57.233 回答