代码之家  ›  专栏  ›  技术社区  ›  James A Mohler

位置应该使用哪个编码器?

  •  3
  • James A Mohler  · 技术社区  · 6 年前

    EncodeFor 应使用 location() ?

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

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

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

    或者

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

    或者

    1 回复  |  直到 6 年前
        1
  •  4
  •   Roman Pokrovskij Peterdk    6 年前

    cflocation / location Location HTTP头。浏览器读取这个值并通过httpget请求所提到的资源。所说的URI应该被编码。

    现在唯一需要编码的URI部分是以问号开头的查询字符串 ? = 以及编码值。多对由一个和号分隔 &

    根据 RFC 1738

    保留字符示例

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

    期望的键值对:

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

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

    现在,key和value中的所有字符都按照 RFC 3986

    冷融合:

    kvps = [];
    
    key = "message";
    val = ErrorMessage;
    kvps.append(
        urlEncodedFormat(key) & "=" & urlEncodedFormat(val)
    );
    
    targetUrl = "btainBDK.cfm?" & arrayToList(kvps, "&");
    location(targetUrl, false);
    

    urlEncodedFormat与encodeForUrl

    Adobe recommends that you use the EncodeForURL function, not the URLEncodedFormat function, to escape special characters in a string for use in a URL in all new applications.

    我遇到的问题 无法正确区分是空格还是实际的加号,尤其是上下文发生变化时(CF<-&燃气轮机;JS)。所以我建议