0

我运行在后端ColdFusion和包装我的网页是这样的:为什么当IE6请求页面时,我在ColdFusion中尝试将HTML转换为Binary时发生错误?

<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工作正常。

感谢您的一些提示!

+0

不,我不想支持IE6。我只是想确保代码是正确的。 – frequent

回答

3

根据错误消息报告的内容,尝试提供一个base64字符串到ToBinary

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

注意,Macromedia建议不要使用ToBinaryToBase64,而是建议使用BinaryDecodeBinaryEncode代替。但是,对于您的使用情况,您可以使用CharsetDecode代替。

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

请注意,这会影响比IE6以上。任何浏览器没有acceptgzip会击中,如果语句。

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

+0

好的。试。非常感谢。 – frequent

+0

'charsetDecode'做什么?它会将我的HTML转换为二进制文件吗?当gzip不被支持时,可以打if语句,这就是我想要做的。 – frequent

+1

@frequent我链接到我的答案中的文档。从CharsetDecode'页面:“将字符串转换为二进制表示。”我关于点击“if”的提示意味着IE6可能会出现更多的错误,所以这不仅仅是IE6的修复。 – nosilleg

相关问题