【问题标题】:Store html content generated with PHP into a variable将 PHP 生成的 html 内容存储到变量中
【发布时间】:2016-10-15 18:25:35
【问题描述】:

我有一些与 HTML 混合的 PHP 代码,我需要将其存储到一个变量中,但我不知道该怎么做。执行此代码时,从调用函数的短代码调用并完美运行。PHP 代码呈现 HTML 并显示来自 DB 的信息,但现在我需要将结果 (this html divs boxes with information from the database) 存储到变量中以便将此变量发送到 wordpress 中可以更新页面的函数。当我尝试它时,出现一个错误,说没有发现回声。我知道这个变量不会检测到里面的 php 代码,那么我该怎么做呢?将结果存储到变量中?

任何建议都会非常感激 提前谢谢你:

$ultimosProyectosHome+="
echo '<div class="cont-proyectos">';
echo '<div style="text-align:center;"><a href="'. $url_actual .'"?      page_id="'. $id_paginaFicha .'" target="_blank">';if($pregunta6Valor!=""){echo '<img src="http://www.xxx.xx/xxx/xxx/'.$pregunta6Valor.'" alt="Cover"></a></div>';} else{echo '<img src="'.$imgDesafio.'" alt="Cover"></a></div>';}
                            echo '<h3>';if($pregunta2Valor != ""){ echo $pregunta2Valor;}else{echo $Nodefinido;}echo'</h3>';

                             echo'<a href="'. $url_actual .'"?page_id="'. $id_paginaFicha .'" target="_blank">';
                                    echo'<h4>';if($pregunta1Valor != ""){ echo $pregunta1Valor;}else{echo $Nodefinido;} echo'</h4>';
                                echo'</a>';                                    
                                echo'<p>'; if($pregunta3Valor != ""){ echo getSubString($pregunta3Valor,198,$id_paginaFicha);}else{echo $Nodefinido;} echo'</p>'; 

                                echo'<div class="redesSocialesTLP" id="redes">';
                                    echo'<a href="https://twitter.com/intent/tweet?url="'. $url_client .'"?page_id="'. $id_paginaFicha .'"&text="'. $pregunta1Valor .'" target="_blank">';

                                        echo'<i class="fa fa-twitter fa-2x"></i>';
                                    echo'</a>';


                                    echo'<a href="https://www.facebook.com/sharer/sharer.php?u="'. $url_client .'"?page_id="'. $id_paginaFicha .'" target="_blank">';

                                        echo'<i class="fa fa-facebook fa-2x"></i>';
                                    echo'</a>';

                                    echo'<a href="https://plus.google.com/share?url="'. $url_client .'"?page_id="'. $id_paginaFicha .'" target="_blank">';

                                        echo'<i class="fa fa-google-plus fa-2x"></i>';
                                    echo'</a>';
                                echo'</div>';
                            echo'</div>';

";

【问题讨论】:

  • 用上面所有的信息创建一个变量字符串,没有所有的回声。然后只需回显整个字符串或将其传递给任何内容。
  • 谢谢你,何塞。您的回答就像 Iserni 正确的方式。我使用 ob_start();现在和作品。最终,我必须创建一个包含所有信息的变量字符串。

标签: php html wordpress variables store


【解决方案1】:

更新

您的代码可能会从下面的答案中受益,但您正在做一件不同的、更危险的事情。您有一大堆 HTML 和 PHP,并希望 执行 以存储其结果。为此,您需要eval() 之类的东西。或者等效地,您可以将代码写入一个名称无法猜测的临时 PHP 文件,然后将其重新包含在您的脚本中,同时将其包装在输出缓冲中。

我已经看到它使用权限有限的“沙盒”服务器完成,但实现起来很复杂。

危险取决于您的代码来自何处。如果其他人可以修改它,那么他将能够在您的服务器上执行任意代码,这是您绝对希望避免的。

出于这个原因,已经开发了一些模板语言 - 您可以 例如,想查看Twig

否则,您现在可以这样做:

$bunch = "<BUNCH OF MIXED CODE FROM ABOVE>";

ob_start();
try {
     eval($bunch);
} catch (\Exception $err) {
     print "There has been an error.";
}
$ultimosProyectosHome += ob_get_clean();

返回“将混合输出存储到变量中”

正确方法

 $html = '';
 ...
 // Remove all occurrences of this
 echo "Something";
 // and this
 echo "<br />";
 // and write it like this instead.
 $html .= 'Something';
 $html .= '<br />';

如果你有产生输出的函数,这可能会变得很尴尬。您必须重写它们以返回输出(就像上面一样,以

结尾
 return $html;

然后无论你有什么

 callToFunction(parameters);

你将重构

 echo callToFunction(parameters);

然后,进一步重构为阅读

 $html .= callToFunction(parameters)

迭代。

懒惰的方式

使用output buffering。一种占用内存、失去对脚本的控制权并在您想要调试它时玩得开心的好方法(除非您使用 Xdebug,但是为什么首先要做这个懒惰的事情呢?)。

 ob_start();
 ...
 $html = ob_get_clean();

【讨论】:

  • 我现在需要使用懒惰的方式。仅用于测试。我最终必须以正确的方式去做。这正是我所需要的。非常感谢!!!
【解决方案2】:

您正在寻找的是输出缓冲。

在回显您的内容之前致电ob_start();,然后在最后:

$content = ob_get_clean();

这两个函数之间输出的所有内容都将存储在$content

PHP manual 中提供了有关这些功能以及其他选项的更多信息。

请记住,输出缓冲通常应该是最后的手段 - 不要太适应在任何地方这样做!

顺便说一句,您可以通过结束 PHP 块 (?&gt; 并在完成后重新启动它 (&lt;?php) 来避免对 echo 的所有调用。

【讨论】:

  • 非常感谢蒂姆,这很有用。
  • 太棒了,每个 PHP 开发人员都必须知道!
猜你喜欢
  • 2017-04-08
  • 2015-09-20
  • 1970-01-01
  • 2012-03-02
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多