我的问题有点奇怪,但让我解释一下:
假设有效的 URI 不允许根据 RFC-2396 使用 unicode,则 URI 中的所有 unicode 都应使用百分比编码进行转义。
一个有效的 URL 应该是一个有效的 URI,所以我们应该使用
http://example.com/%E4%BD%A0%E5%A5%BD
而不是http://example.com/你好
发出请求或将它们放入href
时(尽管大多数浏览器可以处理后一种情况)。此外,我们接受用户提交的 URL,这些 URL 也经过编码(因为当您从地址栏复制 URL 时,浏览器会对它们进行编码)。
因此我们决定(可能是错误的)将它们存储为
http://example.com/%E4%BD%A0%E5%A5%BD
,而不是http://example.com/你好
,毕竟这是原始输入和正确的 url。
当我尝试显示此类 URL 时,我的问题来了,假设它们是用户提交的,我需要对这些数据运行 xss 过滤器。一些实现,例如 xss-filters似乎在运行 encodeURI作为过滤器的一部分,意味着 %
将被双重编码,例如。 %E4
-> %25E4
,在这个过程中破坏了 url。
那么我们是否应该以解码形式存储 url(即使它们是无效的)?在输出上运行 decodeURI
对我来说没有多大意义......
最佳答案
首先,RFC 2396 已被 RFC 3986 废弃.其次,是,如果您的存储机制允许,您应该以解码形式存储您的 URI。
更新 来自 Section 2.4
Under normal circumstances, the only time when octets within a URI are percent-encoded is during the process of producing the URI from its component parts.
更新 2 此外,表示 URI 的一串 unicode 字符实际上是一个 IRI。参见 RFC 3987
关于javascript - url应该以编码形式还是解码形式存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30526880/