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

相關問題