在Javascript中转义双连字符?

时间:2009-06-17 04:23:05

标签: javascript iis url

我有一个Javascript书签,当点击它时,会将用户重定向到新的网页,并将旧网页的URL作为查询字符串中的参数提供。

当原始网页在网址中有双连字符时(例如page--1--of--3.html),我遇到了问题。愚蠢,我知道 - 我无法控制原始页面我正在使用的javascript escape函数不会转义连字符,如果要求提供resource.aspx?original=page--1--of--3.html

我可以使用替代的javascript转义函数吗?解决这个问题的最佳方法是什么?有人知道为什么IIS会在resource.aspx?original=page--1而不是page-1上窒息吗?

4 个答案:

答案 0 :(得分:4)

“escape”和“unes​​cape”正好被弃用,因为它不会对所有相关字符进行编码。 请勿使用ESCAPE或UNESCAPE 。请改用“encodeURIComponent”和“decodeURIComponent”。除了最古老最破旧的浏览器之外,所有浏览器都支持。这种知识并不常见,这真是一个巨大的耻辱。

(另请参阅encodeURI和decodeURI)

编辑:错误刚刚测试过,但这并没有真正覆盖双连字符。遗憾。

答案 1 :(得分:2)

你可以使用一些自定义逻辑扩展转义函数来手动编码hypen吗?

resource.aspx?original=page%2d%2d1%2d%2dof%2d%2d3.html

这样的事情:

function customEscape(url) {
    url = escape(url);
    url = url.replace(/-/g, '%2d');
    return url;
}

location.href = customEscape("resource.axd?original=test--page.html");  

更新,对于书签:

<a href="javascript:location.href=escape('resource.axd?original=test--page.html').replace(/-/g, '%2d')">Link</a>

答案 2 :(得分:1)

你做错了什么。 - 在URL和文件名中是合法的。也许文件确实找不到?

答案 3 :(得分:1)

- 用于以几种脚本语言注释掉文本。 SQL Server使用它来添加注释。您是否使用任何数据库逻辑来存储这些文件名?或者创建任何查询,其中此名称是查询字符串的一部分,而不是使用查询参数?