当前位置:  开发笔记 > 编程语言 > 正文

我可以在网址中使用逗号吗?

如何解决《我可以在网址中使用逗号吗?》经验,为你挑选了4个好方法。

我通常使用URL重写将内容ID传递给我的网站,所以这一点

 Foo.1.aspx 

重写为

 Foo.aspx?id=1

对于特定的应用程序,我需要将多个ID传递给单个页面,所以我重写了要接受的东西:

 Foo.1,2,3,4,5.aspx

这在Cassini(Visual Studio的内置临时Web服务器)中运行良好,但是当我在运行IIS的实时服务器上尝试时,它给了我"Internet Explorer无法显示网页".这是IIS限制吗?我应该使用短划线或下划线而不是逗号吗?



1> ConroyP..:

据我所知,URL的文件名部分允许使用逗号,但域*中是保留字符.

您使用的是哪个版本的IE?我发现IE5.5在逗号上截断URL的奇怪报告(链接在这里,但在IE7中用逗号测试了URL,看起来没问题,所以如果有IE漏洞,它似乎没有再见了 - 这可能是IIS问题吗?

我想知道页面错误是否是由于规则失败而导致的mod_rewrite- 您是否可以发布匹配多个ID的规则并将其传递给您Foo.aspx?它是否有可能只匹配Foo.N,N,并且没有更多逗号?


*来自URI RFC:

2.2.保留字符

许多URI包括由某些特殊字符组成或由其分隔的组件.这些字符称为"保留",因为它们在URI组件中的使用仅限于其保留的用途.如果URI组件的数据与保留的目的冲突,则必须在形成URI之前转义冲突的数据.

 reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                "$" | ","

上面的"保留"语法类是指URI中允许的那些字符,但在通用URI语法的特定组件中可能不允许这些字符



2> Robert Pauls..:

我记得默认情况下Url Routing首先检查文件是否存在,并且逗号在文件名中是不合法的,这可能是您收到错误的原因.IIS可能有遗留代码,在请求进入asp.net进行处理之前中止请求.

Scott Hanselman的博客文章对此有所了解,可能与您有关.


作为一般性评论:Url重写通常用于使网址友好且易于记忆.

~/page.aspx?id=1,2,3,4既不是更糟也不是更好~/page/1-2-3-4.aspx:两者都难以使用,为什么要经过额外的努力呢?尽量避免创建新的网址表单.用户,服务台和其他开发人员只会感到困惑.

网址重写最好用于转换

~/products/view.aspx?id=1
~/products/category.aspx?type=beverage

~/products/view/1
~/products/category/beverage



3> 小智..:

尝试%2c在URL中使用以替换逗号.



4> speedplane..:

除了ConroyP的答案之外,以下是对RFC的另一种引用。它记录了许多不安全的字符,但未提及逗号(表明逗号是安全的):

出于多种原因,字符可能是不安全的。空格字符是不安全的,因为在对URL进行转录或排版或对文字处理程序进行处理时,可能会消失大量空格并且可能会引入无关紧要的空格。字符“ <”和“>”是不安全的,因为它们被用作自由文本中URL的定界符;在某些系统中,引号(“”“)用于分隔URL。字符”#“是不安全的,并且应始终进行编码,因为在万维网和其他系统中,该字符用于分隔片段/锚定URL。字符“%”是不安全的,因为它用于其他字符的编码。其他字符是不安全的,因为已知网关和其他传输代理有时会修改此类字符。这些字符是“ {”,“}”,“ |”,“ \”,“ ^”,“〜”,“ [”,“]”和“`”。

所有不安全字符必须始终在URL中编码。例如,即使在通常不处理片段或锚标识符的系统中,字符“#”也必须在URL中进行编码,因此,如果将URL复制到另一个使用它们的系统中,则无需更改URL编码。

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有