应该使用哪个EncodeFor进行定位?

詹姆斯·阿莫勒

EncodeFor应该使用哪个location()

如果我想通过位置推送一些数据,它应该是什么样?

location("obtainBDK.cfm?message=#ErrorMessage#", false); // nothing

要么

location("obtainBDK.cfm?message=#EncodeForHTMLAttribute(ErrorMessage)#", false);

要么

location("obtainBDK.cfm?message=#EncodeForURL(ErrorMessage)#", false);

要么

还有吗

亚历克斯

cflocation/location设置LocationHTTP标头。浏览器读取该值并通过HTTP GET请求提及的资源。所述URI应该被编码。

现在,唯一需要编码的URI部分是查询字符串,该字符串以问号开头?每个键值对均由编码键,等号=和编码值组成。多对以“&”号分隔&

根据RFC 1738

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

保留字符示例

未编码的URI:
http://example.org/path?&=&&===&?

预期的键值对:

- "&": "&"
- "=": "="
- "?": ""

但是,正确的解析器将只能看到空键和值。我们需要对键和值进行编码,以免将其用于技术目的。

编码的URI: http://example.org/path?%26=%26&%3D=%3D&%3F&%20=%20!

现在,键和值中的所有字符均已按照RFC 3986进行百分比编码,并且解析器不会将其弄错。

ColdFusion:

kvps = [];

key = "message";
val = ErrorMessage;
kvps.append(
    urlEncodedFormat(key) & "=" & urlEncodedFormat(val)
);

targetUrl = "btainBDK.cfm?" & arrayToList(kvps, "&");
location(targetUrl, false);

urlEncodedFormat与encodeForUrl

虽然...

Adobe建议您使用EncodeForURL函数而不是URLEncodedFormat函数来转义字符串中的特殊字符,以在所有新应用程序的URL中使用。

我遇到了+无法正确地区分空格或实际加号的问题,尤其是在上下文更改时(CF <-> JS)。因此,urlEncodedFormat无论Adobe对此如何,我都会推荐

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章