2009-06-17 94 views
4

我有一个JavaScript书签,当点击,将用户重定向到一个新的网页,并提供旧网页的URL作为查询字符串参数。在Javascript中转义双连字符?

我遇到一个问题,当原来的网页具有URL中的双连字符(例如:page--1--of--3.html)。愚蠢的,我知道 - 我无法控制的原始页面,我使用的是不逃避连字符的JavaScript escape功能,如果受邀担任resource.aspx?original=page--1--of--3.html

IIS 6给出了一个文件未找到错误是否有其他的JavaScript我可以使用escape函数吗?解决这个问题的最好方法是什么?有谁知道为什么IIS扼流圈resource.aspx?original=page--1而不是page-1

+0

你检查服务器日志,看看它是* * recieving的要求? – Breton 2009-06-17 05:42:45

回答

2

可以展开一些自定义逻辑逃生功能的连字符的编码手动?

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> 
+0

是否可以在小书签内做到这一点? – ine 2009-06-17 04:31:28

+0

我用书签添加了更新 – bendewey 2009-06-17 04:44:46

+2

我接受这个方法,但坦率地说它没有任何意义。这意味着IIS6会对URL中的内容进行一些处理(不奇怪,但我从未听说过)。 – SpliFF 2009-06-17 05:07:13

1

你做别的事情是错误的。 - 在网址和文件名中是合法的。也许文件确实没有找到?

1

- 用于在几个脚本语言注释文本。 SQL Server使用它来添加注释。你使用任何数据库逻辑来存储这些文件名吗?或者在这个名字是查询字符串的一部分而不是使用查询参数的情况下创建任何查询?

4

“越狱”和“UNESCAPE”精确反对,因为它不编码所有相关的字符。 请勿使用ESCAPE或UNESCAPE。改为使用“encodeURIComponent”和“decodeURIComponent”。除了最古老的破旧浏览器之外,它们都受到支持。这真是一个巨大的耻辱,这种知识并不常见。

(另见是encodeURI和decodeURI)

编辑:犯错刚刚测试过,但是这并没有真正覆盖双连动。抱歉。