1

我在后端运行 ColdFusion 并像这样包装我的页面:

    <cfsavecontent variable="renderedResults"><p>hello</p></cfsavecontent>
    <cfscript>
        compressedHTML = reReplace(renderedResults, "\>\s+\<", "> <", "ALL");
        compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(13), "ALL");
        compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(09), "ALL");
        variables.alredayBinary = "false";
    </cfscript>

    <cfif cgi.HTTP_ACCEPT_ENCODING contains "gzip">
       <cfinvoke component="services.utils" method="gzip" stringToZip="#compressedHTML#" returnvariable="compressedHTML"></cfinvoke>    
       <cfheader name="Content-Encoding" value="gzip">
       <cfset variables.alredayBinary = "true">
    </cfif>

    <cfheader name="Content-Type" value="text/html; charset=ISO-8859-1">
    <cfheader name="Content-Length" value="#len(compressedHTML)#" >

    <cfif variables.alredayBinary EQ "false">
        <cfcontent reset="no" variable="#ToBinary(compressedHTML)#" />
    <cfelse>
        <cfcontent reset="no" variable="#compressedHTML#" />    
    </cfif>
    <cfreturn  /> 

尽管这对我来说很有意义并且似乎在最新的浏览器上运行良好,但我只是让用户使用 Internet Explorer 6 产生了一系列错误消息。

我收到的信息是:

 The parameter 1 of function ToBinary, which is now <HTML STRING> must be a Base-64 encoded string

这告诉我,我最终得到variables.alredayBinary = false应该将 HTML 字符串转换为二进制编码字符串。

问题:
我不确定我理解什么toBinary。不就是为了那个 - 获取 HTML 并转换它吗?那么为什么会出错呢?为什么只在 IE6 上?我只能测试运行良好的 IE8。

感谢您的一些提示!

4

1 回答 1

3

根据错误消息报告的内容,尝试将 base64 字符串提供给ToBinary.

<cfcontent reset="no" variable="#ToBinary(ToBase64(compressedHTML))#" />

请注意,Adobe 建议不要使用ToBinaryand ToBase64,而是建议使用BinaryDecodeand BinaryEncode。但是,对于您的使用,您可以CharsetDecode改为使用。

<cfcontent reset="no" variable="#CharsetDecode(compressedHTML, "iso-8859-1")#" />

请注意,这将影响的不仅仅是 IE6。任何不accept gzip符合 if 语句的浏览器。

附加说明,在我的示例中,我iso-8859-1根据您的代码将编码设置为,但建议您考虑utf-8.

于 2012-10-23T10:46:27.490 回答