我对编码的 URL 感到困惑。
例如,当我编写浏览器时:
stackoverflow.com/questions
我可以成功查看页面。
但是,当我写:
stackoverflow.com%2Fquestions
我无法查看。
由于%2F表示“/”,我想了解为什么它不能正常工作。
我想知道的原因是我得到了一个编码的 URL,但我不知道如何在收到 URL 后立即解码该 URL,以免出现错误页面。
我对编码的 URL 感到困惑。
例如,当我编写浏览器时:
stackoverflow.com/questions
我可以成功查看页面。
但是,当我写:
stackoverflow.com%2Fquestions
我无法查看。
由于%2F表示“/”,我想了解为什么它不能正常工作。
我想知道的原因是我得到了一个编码的 URL,但我不知道如何在收到 URL 后立即解码该 URL,以免出现错误页面。
是其中/
之一percent-encoding reserved characters
。URLpercent-encoding reserved characters
用于定义其语法。只有当这些字符在 URL 中没有以它们的特殊角色使用时,才需要对它们进行编码。
百分比编码保留字符:
! * ' ( ) ; : @ & = + $ , / ? # [ ]
%21 %2A %27 %28 %29 %3B %3A %40 %26 %3D %2B %24 %2C %2F %3F %23 %5B %5D
%2F
是一个转义的 URL /
。这意味着,将/
其视为字符,而不是目录分隔符。
本质上,它是在寻找一个域 stackoverflow.com/questions
,而不是stackoverflow.com
带有路径的域questions
。
%2F 是当您想在参数中包含 / 但不希望浏览器导航到不同的目录/路由时编写的内容。
因此,如果您将文件路径“根/子目录”作为查询字符串参数传递,您可能希望将其编码为:
http://www.testurl.com/page.php?path=root%2Fsubdirectory
而不是
URL 编码用于对来自 HTML 表单的字符串 URL 参数进行编码,其中包含特殊字符,如“/”。写“stackoverflow.com%2Fquestions”是错误的,在这种情况下,“/”是 URL 本身的一部分,不能编码。
%2F
是一个转义字符实体 - 意味着它将包含在名称中,而不是字符/
,它表示目录层次结构,如 RFC 1630, page 8 中所述。