在Javascript中转义双连字符?
我有一个Javascript bookmarklet,当点击它时,它会将用户重定向到一个新网页,并在查询字符串中提供旧网页的URL作为参数 当原始网页的URL中有一个双连字符时,我遇到了一个问题(例如,在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转义函数?解决
page--1--of--3.html
)。愚蠢,我知道-我无法控制原始页面我正在使用的javascriptescape
函数不会跳过连字符,如果要求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服务器的方式具有这种奇怪的副作用。你说得对,对不起-但消息的基本要旨仍然正确,即使它不能解决手头的问题。您是否检查了服务器日志以查看它接收到的请求?