Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中转义双连字符?_Javascript_Iis_Url - Fatal编程技术网

在Javascript中转义双连字符?

在Javascript中转义双连字符?,javascript,iis,url,Javascript,Iis,Url,我有一个Javascript bookmarklet,当点击它时,它会将用户重定向到一个新网页,并在查询字符串中提供旧网页的URL作为参数 当原始网页的URL中有一个双连字符时,我遇到了一个问题(例如,page--1--of--3.html)。愚蠢,我知道-我无法控制原始页面我正在使用的javascriptescape函数不会跳过连字符,如果要求IIS 6提供resource.aspx?original=page--1--of--3.html 我是否可以使用其他javascript转义函数?解决

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

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


我是否可以使用其他javascript转义函数?解决这个问题的最好办法是什么?有人知道为什么IIS会阻塞
resource.aspx?original=page--1
而不是
page-1

你能用一些自定义逻辑扩展转义函数来手动编码催眠吗

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");  
更新,对于bookmarklet:

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

你做错了别的事情。--在URL和文件名中是合法的。可能文件真的找不到?

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

不推荐使用“escape”和“unescape”,因为它没有对所有相关字符进行编码不要使用转义或取消转义。改用“encodeURIComponent”和“decodeURIComponent”。除最旧最破旧的浏览器外,所有浏览器都支持。这真是一个巨大的遗憾,这种知识并不是很普遍

(另请参见encodeURI和decodeURI)


编辑:err刚刚测试过,但这还没有真正涵盖双连字符。很抱歉。

我很确定该文件存在并且存在。该错误仅在双连字符出现时发生。请记住,这是IIS 6,这可能是原因。您是否检查过resource.aspx是否出于某些疯狂的原因而删除了双hythens?是的,非常确定-服务器在resource.aspx看到请求之前返回404。我接受这一点,但坦率地说,这毫无意义。这意味着IIS6对规范中没有的URL做了一些事情(这并不奇怪,但我也从未听说过)。不要试图让你自己的逃生功能,你永远无法覆盖所有角落的情况。已经有了处理这些东西的内置函数。更多信息请参见我的答案。斯普利夫-我支持你!但这是在共享主机服务器上-我能想到的唯一解释是,该公司配置IIS服务器的方式具有这种奇怪的副作用。你说得对,对不起-但消息的基本要旨仍然正确,即使它不能解决手头的问题。您是否检查了服务器日志以查看它接收到的请求?