2

HiveLogicEnkoderを使用して難読化された電子メールを生成しました。結果をPHPでエコーしたいと思います。

問題は、、、、およびが含まれていることです。これら'はすべて、PHPが文字列を読み取る方法を台無しにします。PHPにこれを文字通りに解釈させるにはどうすればよいですか?エスケープが必要な文字をエスケープし、エスケープが不要な文字をエスケープ解除しますか?"\\\\\\

だから私はしたい:

echo '<script type="text/javascript">
    //<![CDATA[
    <!--
    var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
    "=102){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return " +
    "o.substr(0,ol);}f(\")12,\\\",&.=1,p?3k`,gcheB8'Xfo!l720\\\\430\\\\120\\\\>X" +
    "%E220\\\\230\\\\100\\\\530\\\\700\\\\RS,OT130\\\\630\\\\400\\\\230\\\\130\\" +
    "\\530\\\\4[120\\\\700\\\\600\\\\010\\\\300\\\\520\\\\,a038t=68&>&2?120\\\\(" +
    "*\\\"\\\\,v$>%!&+g030\\\\~$$2Wt\\\\I330\\\\400\\\\r\\\\JOGUImi3hu771\\\\tmt" +
    "yq\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;721=%y;i=" +
    "+y)12==i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noitcnuf\")" ;
    while(x=eval(x));
    //-->
    //]]>
    </script>
';

編集:これが私が今使っている関数です:

function supportEmail() {
    $str = <<<'EOT'
    <script type="text/javascript">
        //<![CDATA[
        <!--
        var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
        "=102){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return " +
        "o.substr(0,ol);}f(\")12,\\\",&.=1,p?3k`,gcheB8'Xfo!l720\\\\430\\\\120\\\\>X" +
        "%E220\\\\230\\\\100\\\\530\\\\700\\\\RS,OT130\\\\630\\\\400\\\\230\\\\130\\" +
        "\\530\\\\4[120\\\\700\\\\600\\\\010\\\\300\\\\520\\\\,a038t=68&>&2?120\\\\(" +
        "*\\\"\\\\,v$>%!&+g030\\\\~$$2Wt\\\\I330\\\\400\\\\r\\\\JOGUImi3hu771\\\\tmt" +
        "yq\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;721=%y;i=" +
        "+y)12==i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noitcnuf\")" ;
        while(x=eval(x));
        //-->
        //]]>
        </script>
    EOT;
    echo $str;
}

しかし、このエラーが返されます:

解析エラー:構文エラー、予期しない$ end、T_VARIABLEまたはT_END_HEREDOCまたはT_DOLLAR_OPEN_CURLY_BRACESまたはT_CURLY_OPENが必要です

4

4 に答える 4

4
echo <<<'EOT'
<script type="text/javascript">
    //<![CDATA[
    <!--
    var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
    "=102){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return " +
    "o.substr(0,ol);}f(\")12,\\\",&.=1,p?3k`,gcheB8'Xfo!l720\\\\430\\\\120\\\\>X" +
    "%E220\\\\230\\\\100\\\\530\\\\700\\\\RS,OT130\\\\630\\\\400\\\\230\\\\130\\" +
    "\\530\\\\4[120\\\\700\\\\600\\\\010\\\\300\\\\520\\\\,a038t=68&>&2?120\\\\(" +
    "*\\\"\\\\,v$>%!&+g030\\\\~$$2Wt\\\\I330\\\\400\\\\r\\\\JOGUImi3hu771\\\\tmt" +
    "yq\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;721=%y;i=" +
    "+y)12==i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noitcnuf\")" ;
    while(x=eval(x));
    //-->
    //]]>
    </script>
EOT;

文字列を<<<'EOT'EOTでラップします。

于 2012-07-31T14:25:26.393 に答える
1

ヒアドキュメントを使用してみてください:

$str = <<<EOD
    <script type="text/javascript">
    //<![CDATA[
    <!--
    var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
    "=102){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return " +
    "o.substr(0,ol);}f(\")12,\\\",&.=1,p?3k`,gcheB8'Xfo!l720\\\\430\\\\120\\\\>X" +
    "%E220\\\\230\\\\100\\\\530\\\\700\\\\RS,OT130\\\\630\\\\400\\\\230\\\\130\\" +
    "\\530\\\\4[120\\\\700\\\\600\\\\010\\\\300\\\\520\\\\,a038t=68&>&2?120\\\\(" +
    "*\\\"\\\\,v$>%!&+g030\\\\~$$2Wt\\\\I330\\\\400\\\\r\\\\JOGUImi3hu771\\\\tmt" +
    "yq\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;721=%y;i=" +
    "+y)12==i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noitcnuf\")" ;
    while(x=eval(x));
    //-->
    //]]>
    </script>
EOD;
于 2012-07-31T14:26:47.453 に答える
0

文字列をファイル/データベースに保存し、そこから取得することができます。

他の回答でコメントされているnowdocs/heredocsを使用することによる問題は、\\が両方でエスケープされたスラッシュであるということです。

nowdocブロックを使用して、出現するすべての\を\\に置き換えることもできます。

于 2012-07-31T14:29:49.390 に答える
0

このエラーが発生する理由は、EOTを閉じる前に空白があるためです。前または後ろのすべてのタブまたは空白を削除します。

于 2013-04-12T18:20:43.733 に答える