2012-07-31 3 views
2

Hive Logic Enkoder을 사용하여 난독 화 된 전자 메일을 생성했습니다. 결과를 PHP에 표시하고 싶습니다. 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

+1

이 문자열을 어떻게 읽었는지 표시하십시오. 어떤 식 으로든 텍스트를 실행하지 않는 한 PHP는 문자열에 삽입 된 메타 문자로 아무 것도하지 않습니다. via eval(). –

+5

원하는 것은 [nowdocs] (http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc)입니다. – Palladium

+1

구문 오류는'EOT;'*의 줄이 줄의 처음에 있어야하기 때문에 (즉, 앞에 공백이없고 뒤에는 공백이 없어야하기 때문입니다). – Palladium

답변

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; Heredoc를 사용

+0

'Nowdoc 지원은 PHP 5.3.0에서 추가되었습니다 .'. –

+0

아아, 예전에 내가 알아 차 렸던 것처럼 혼란스러워졌습니다. heredoc을 생각하고 있었습니까 – JConstantine

+0

작은 따옴표로 묶인 문자열 에서처럼 이중 백 슬래시가 이스케이프되지 않습니까? – Lumbendil

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; 
0

당신은 파일/데이터베이스에 문자열을 저장하고, 거기에서 거기에서 구할 수 있습니다.

다른 답변에서 주석 처리 된 nowdocs/heredocs를 사용할 때의 문제점은 \\가 \\ 모두 이스케이프 처리 된 슬래시입니다.

nowdoc 블록을 사용하여 \의 모든 항목을 \\에 바꿀 수도 있습니다.

0

이 오류를 표시하는 이유는 닫는 EOT 앞에 공백이 있기 때문입니다. 앞이나 뒤에있는 모든 탭이나 공백을 제거하십시오.

관련 문제