2010-07-29 5 views
1

html 내에서 일부 PHP 코드를 사용하여 html 문자열을 반환하려고합니다. 이렇게하는 데 약간의 어려움이 있습니다. 예 아래 모든 반환 완벽하게이 전포함 된 PHP echo 문을 사용하여 html로 된 문자열 반환

return '//bunch of html here 
<div id="test"> 
<?php 
    if (isset($_COOKIE[\"cannycookie\"])) 
    { 
     echo "<a class=\"reply\" href=\"#\" id=\"deletelink-'.$d['id'].'\">Delete</a>"; 
    } 
?> 
</div>'; 

HTML,하지만 ">Delete</a>";}?> 뭔가 충돌 및 화상에 도달 할 때. html은 브라우저에서 다음과 같이 렌더링합니다. Delete\n"; } ?> 전체 PHP 소스가 노출되어 있습니다. 나는 진술서에서 따옴표에 대한 다른 게시물과 정보를 읽으려고 시도했지만 가능한 한 많이 시도했지만 아무런 도움도주지 못했다. 어떤 이상자? 감사! PHP 내부

+0

relet 상태로, PHP 코드는 서버 측이, 당신이 그와 같은 문자열을 PHP 코드를 반환하고 반환 값을 에코 경우는 아무것도 기대할 수 없다. –

+0

PHP로 PHP를 작성 하시겠습니까? OK, 가장 가능성있는 오류 : $ d [ 'id']에 '?>'이 있습니다. – Wrikken

답변

2

PHP가 이상하다,이 시도 :

if (isset($_COOKIE["cannycookie"])) 
{ 
    return '<div id="test"> 
       <a class="reply" href="#" id="deletelink-'.$d['id'].'">Delete</a> 
      </div>'; 
} 
else 
{ 
    return '<div id="test"></div>'; 
} 
+0

사실,이 HTML 코드 (특히 사용자 주석)를 반환하는 다른 PHP 파일에서 함수를 호출하고 올바른 사용자가 로그인하면 삭제 단추가 추가됩니다. 무엇을해야할지 모르겠습니다. – Ryan

1

을 정신 목적으로 그렇게 반환하지 않는 대신 :

$myReturnStatement = htmlentities('whatever you wanted'); 
return $myReturnStatement; 

를 수신 측에, 당신은 슬래시를 제거하고 엔티티를 디코딩 합법적 인 PHP 코드로 돌아갑니다. 또한, 내 따옴표를 올바르게 이해한다면 작은 따옴표 안에 큰 따옴표를 넣지 않아도됩니다. 이것은 두통을 줄여 줄 것입니다. 코드가 일반 PHP 코드로 디코드되면 eval()을 사용하여 PHP로 평가하십시오. http://www.php.net/manual/en/function.html-entity-decode.php
http://php.net/manual/en/function.eval.php

+0

그냥 이걸 시도해 보니 페이지에 모든 HTML 소스가 눈에 띄게 렌더링되어있는 것처럼 보입니다. – Ryan

+0

엔티티를 디코딩 한 다음 eval()을 사용해야합니다. http://php.net/manual/en/function.eval.php –

0


http://php.net/manual/en/function.htmlentities.php

http://us2.php.net/manual/en/function.stripslashes.php는 PHP를 반환하지 마십시오. 그것은 작동하지 않을 것이고, 그렇게하더라도 eval() 등을 사용하는 것은 매우 특정한 상황을 제외하고는 해로운 (심각한 보안 문제) 것으로 간주됩니다.

이 시도 :

<?php 

$retval = '<div id="test"> <!-- whatever you need here -->'; 
if (isset($_COOKIE["cannycookie"])) 
{ 
    $retval .= '<a class="reply" href="#" id="deletelink-'.$d['id'].'">Delete</a>'; 
} 

return $retval; 

?>