【问题标题】:Return string of html with an embedded php echo statement返回带有嵌入式 php echo 语句的 html 字符串
【发布时间】:2011-03-22 21:52:48
【问题描述】:

我试图在 html 中返回一个带有一些 php 代码的 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 都可以完美返回,但是当它到达 "&gt;Delete&lt;/a&gt;";}?&gt; 时,某些东西会崩溃并烧毁。 html 在浏览器中呈现如下:Delete\n"; } ?&gt; 暴露了整个 php 源。我已经尝试阅读其他帖子和有关声明中引用的信息,并且我已经尽可能多地尝试了,但无济于事。任何想法?谢谢!

【问题讨论】:

  • 正如 relet 所说,PHP 代码是服务器端的,您不能以这样的字符串返回 PHP 代码,并且如果您回显返回值,则期望它执行任何操作。
  • 用 PHP 构建 PHP?好的,最有可能的错误:$d['id'] 里面有一个 '?>'。

标签: php html return quotes echo


【解决方案1】:

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>';
}

【讨论】:

  • 问题是,我在不同的 php 文件中调用该函数,该文件返回此 html 代码(特别是用户 cmets),当正确的用户登录时,它会添加删除按钮。不知道该怎么办。
【解决方案2】:

为了理智,不要那样返回,而是:

$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

【讨论】:

【解决方案3】:

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

?>

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多