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  /> 

これは私には理にかなっており、最新のブラウザーでは正常に機能しているように見えますが、ユーザーにInternetExplorer6を使用して大量のエラーメッセージを生成させました。

私が受け取っているメッセージは次のとおりです。

 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))#" />

アドビはandを使用しないことを推奨し、代わりにToBinaryandを使用することを推奨していることに注意してください。ただし、使用法については、代わりに使用できます。ToBase64BinaryDecodeBinaryEncodeCharsetDecode

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

これはIE6以上に影響することに注意してください。ヒットしなかったブラウザはaccept gzip、ifステートメントにヒットします。

さらに、私の例では、iso-8859-1コードに従ってエンコーディングを設定しましたが、検討することをお勧めしますutf-8

于 2012-10-23T10:46:27.490 に答える