2010-02-08 168 views
5

,我们遇到一个奇怪的说法,我的工作,我可能是错的这一点,所以这就是为什么我问。使用目录名称中的下划线进行URL编码?

我们的软件输出的目录与目录的名称%5F取代下划线的Apache服务器。

例如,如果目录的名称在我们的软件中被列为字符串,它将是:“andy_test”,但是当软件将目录输出到Apache服务器时,它会变成“andy%5Ftest”。不幸的是,当你访问服务器上的URL时,它最终变成了“andy%255Ftest”。

不知怎的,这似乎是我错了,再次的进展是:

  1. andy_test < - (如软件字符串)
  2. 安迪%5Ftest < - (列为服务器上的目录)
  3. 安迪%255Ftest < - (必须在调用同一个目录从Web浏览器的服务器上的URL时使用)

我assum “%5”是用于下划线的编码,“%25”是用于“%”的编码。

现在看来,目录名应该在服务器上列出的方式只是简单的andy_test,如果您使用的是编码的URI,那么也许你最终会用“andy%5Ftest”来访问apache服务器上的目录。

我问这件事了后台的人,他们说,他们只是:“任何编码,这不是一个字母或数字

所以我想我在这个有点困惑。你能告诉我,谁是正确的,并指导我,为什么一些信息

回答

9

为您创建它们,您应该不编码的目录名(如你所说)。编码应该只发生在将其发送给浏览器的最后阶段。这就是为什么你以'double'编码结束:%25是%,而5F是下划线第一编码中的剩余部分。

BTW,你不需要编码无论如何强调(我根据rfc1738认为)。

2.2。URL字符编码问题

...

因此,只有字母数字,特殊字符 “$ -_。+!*'()”,和用于各自保留目的 保留字符可以使用 未在URL中进行编码。

+1

感谢您的RFC参考! – leeand00 2010-02-08 15:39:22

3

有双编码,你是显示什么发生的两个步骤应该是足够了:?

andy_test既是在软件中的字符串以及文件系统中的目录或脚本的实际名称(Web服务器访问的资源)

andy%5Ftestandy_test URL编码。这个字符串应该是浏览器使用的(它在下划线的情况下并不是真的需要,但可能在其他情况下)。

andy%255ftest只是andy_test网址编码两次,这是没有意义的,应该没有必要。只需决定在哪里进行编码。如果你在代码级别和网络服务器级别都这样做,这是可能发生的,并且结果是断开的链接,除非你再次解码两次,这不是真的需要也不是理智的。

+0

我没有写软件的后端,我只是试图说服后端的人,有些事情做错了。 – leeand00 2010-02-08 15:41:18

+0

@ leeand00:显而易见,做两次事情是错误的。目的应该是确定编码的最佳位置,并且只在那里(不是两次)。 – 2010-02-08 16:03:28