在PHP中完全字面意思地使用字符串

时间:2012-07-31 14:15:12

标签: php string

我使用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 个答案:

答案 0 :(得分: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;

将字符串换入&lt;&lt;&lt;'EOT'EOT;

答案 1 :(得分: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;

答案 2 :(得分:0)

您可以将字符串存储在文件/数据库中,然后从那里获取它。

使用nowdocs / heredocs在其他答案中评论的问题是\\是两者中的转义斜杠。

您还可以使用nowdoc块并将所有出现的\替换为\\。

答案 3 :(得分:0)

它给出此错误的原因是因为在关闭EOT之前有空格。移除前面或后面的所有标签或空白区域。