2010-07-29 70 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源代碼被暴露。我已經嘗試閱讀其他帖子和關於報價的信息,並儘可能多地嘗試,但無濟於事。任何ideers?謝謝!

+0

作爲轉租狀態,PHP代碼是服務器端,你不能在那樣的字符串返回PHP代碼,並期望它,如果你回聲出返回值做任何事情。 – 2010-07-29 18:53:03

+0

用PHP構建PHP?好吧,最有可能的錯誤:$ d ['id']裏面有'?>'。 – Wrikken 2010-07-29 18:53:04

回答

2

PHP 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 2010-07-29 19:03:59

1

不喜歡返回神智的目的,而不是:

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

在接收端,你帶斜槓和解碼實體回到合法的PHP代碼中。另外,如果我正確理解了我的引號,則可以在單引號內使用雙引號,而不必刪除它們。這應該會讓你頭痛。一旦代碼被解碼爲正常的PHP代碼,只需使用eval()來評估爲PHP。

http://us2.php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/function.htmlentities.php
http://www.php.net/manual/en/function.html-entity-decode.php
http://php.net/manual/en/function.eval.php

+0

剛剛嘗試過,它似乎只是在頁面上顯示所有html源代碼。 – Ryan 2010-07-29 19:11:54

+0

您必須解碼實體,然後使用eval()。 http://php.net/manual/en/function.eval.php – 2010-07-29 19:25:29

0

不要返回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; 

?>