2

我使用Hive Logic Enkoder生成了一封混淆的电子邮件。我想在 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

尝试使用Heredoc

$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 回答