0

我需要能够将所有这些信息(作为文本)放入变量 $all 中,以便稍后在我的脚本中使用它。但是当我稍后回显 $all 时,它不起作用。不要有人说字体标签的使用,我和你一样沮丧。

   $all = <<< STOPTHISCRAZYTHING
    echo "<br><br><textarea rows=\"30\" cols = \"100\">";
    echo "<div align=\"center\"><font size=\"7\">I Have</font></div>";
    foreach($same as $match)
        {
        echo "<img src=\"" . $match . "\">";
        }
    echo "<div align=\"center\"><font size=\"7\">I Need</font></div>";
    foreach($different as $diff)
        {
        if(!in_array($diff, $reject))
        {
        echo "<img src=\"" . $diff . "\">";
        }
        }
    echo "<div align=\"center\"><font size=\"7\">I Am Unable To Obtain</font></div>";
    foreach($retired_different as $unabletoget)
        {
        echo "<img src=\"" . $unabletoget . "\">";
        }
    echo "</textarea>";
STOPTHISCRAZYTHING;
4

6 回答 6

1

您不能在 heredoc 语法中嵌入循环结构。您需要在以下范围之外处理您的 foreach 循环:

$all = STOPTHISCRAZYTHING
    ...
STOPTHISCRAZYTHING;

编辑:

“回声”声明同上。您可以在heredoc 分配中使用变量,但您可以将其视为字符串分配右侧的整个块。不是执行 PHP 命令的块。

编辑2:

这是一个有效的例子,使用你的例子(部分)

    $all = <<< STOPTHISCRAZYTHING
        <br><br><textarea rows="30" cols ="100">
        <div align="center"><font size="7">I Have</font></div>
STOPTHISCRAZYTHING;

...请注意您如何输入所需的文本,您不必回显,也不必转义引号。

文档:http ://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

干杯

于 2012-04-10T21:45:28.127 回答
1

我不确定你的意思,It's all messed up, though it's printed.但在我看来它打印得很好,但浏览器正在向你显示渲染版本:只需检查源代码。

如果您想将其视为真实文本,您需要做的是:

  • 将其包装在<pre>标签中以保留换行符(或nl2br()在回显之前在字符串上使用)
  • 在回显变量之前使用htmlspecialchars()变量,以便将<等符号转换为 html 实体。
于 2012-04-10T21:51:33.090 回答
1

您正在寻找输出缓冲

ob_start(); // Start capturing the script's output

echo "<br><br><textarea rows=\"30\" cols = \"100\">";
echo "<div align=\"center\"><font size=\"7\">I Have</font></div>";
foreach($same as $match)
    {
    echo "<img src=\"" . $match . "\">";
    }
echo "<div align=\"center\"><font size=\"7\">I Need</font></div>";
foreach($different as $diff)
    {
    if(!in_array($diff, $reject))
    {
    echo "<img src=\"" . $diff . "\">";
    }
    }
echo "<div align=\"center\"><font size=\"7\">I Am Unable To Obtain</font></div>";
foreach($retired_different as $unabletoget)
    {
    echo "<img src=\"" . $unabletoget . "\">";
    }
echo "</textarea>";

$all = ob_get_flush(); // Stop capturing output, and store the output 
// that was captured up until now into the variable $all
于 2012-04-10T21:55:01.220 回答
0

我相信您正在尝试做的事情,您可以通过使用 ob_start() 和朋友来完成。heredoc (<<<) 仅用于在不使用引号的情况下创建大型字符串变量。您不能将代码和所有这些东西放在heredoc 字符串中。

http://php.net/manual/en/function.ob-start.php

ob_start() 可以让您缓冲打印的所有内容。然后,您可以使用其他 ob 函数来获取该缓冲输出并将其放入变量或您想要对其执行的任何操作。

于 2012-04-10T21:55:11.107 回答
0

你在那里有一些有趣的括号....

你需要使用Heredoc吗?为什么不使用“。”将其全部添加到变量中?运算符将它们连接起来。此外,为了简化事情,您可以混合使用单引号和双引号:

$all = "<br><br><textarea rows='30' cols = '100'>";
$all = $all . "<div align='center'><font size='7'>I Have</font></div>";
foreach($same as $match)
{
    $all = $all . "<img src='" . $match . "'>";
}
$all = $all . "<div align='center'><font size='7'>I Need</font></div>";
foreach($different as $diff)
{
    if(!in_array($diff, $reject))
{
$all = $all . "<img src='" . $diff . "'>";
$all = $all . "<div align='center'><font size='7'>I Am Unable To Obtain</font></div>";
foreach($retired_different as $unabletoget)
{
    $all = $all . "<img src='" . $unabletoget . "'>";
}
$all = $all . "</textarea>";

现在,当您回显 $all 变量时,您将获得所需的完整输出

echo $all;
于 2012-04-10T21:58:07.550 回答
-1

解决方案 A:

<?php
   $all = <<< STOPTHISCRAZYTHING
    echo "&lt;br&gt;&lt;br&gt;&lt;textarea rows=\"30\" cols = \"100\"&gt;";
    echo "&lt;div align=\"center\"&gt;&lt;font size=\"7\"&gt;I Have&lt;/font&gt;&lt;/div&gt;";
    foreach($same as $match)
        {
        echo "&lt;img src=\"" . $match . "\"&gt;";
        }
    echo "&lt;div align=\"center\"&gt;&lt;font size=\"7\"&gt;I Need&lt;/font&gt;&lt;/div&gt;";
    foreach($different as $diff)
        {
        if(!in_array($diff, $reject))
        {
        echo "&lt;img src=\"" . $diff . "\"&gt;";
        }
        }
    echo "&lt;div align=\"center\"&gt;&lt;font size=\"7\"&gt;I Am Unable To Obtain&lt;/font&gt;&lt;/div&gt;";
    foreach($retired_different as $unabletoget)
        {
        echo "&lt;img src=\"" . $unabletoget . "\"&gt;";
        }
    echo "&lt;/textarea&gt;";
STOPTHISCRAZYTHING;

echo $all;

?>

解决方案 B (使用htmlentities

<?php
   $all = <<< STOPTHISCRAZYTHING
    echo "<br><br><textarea rows=\"30\" cols = \"100\">";
    echo "<div align=\"center\"><font size=\"7\">I Have</font></div>";
    foreach($same as $match)
        {
        echo "<img src=\"" . $match . "\">";
        }
    echo "<div align=\"center\"><font size=\"7\">I Need</font></div>";
    foreach($different as $diff)
        {
        if(!in_array($diff, $reject))
        {
        echo "<img src=\"" . $diff . "\">";
        }
        }
    echo "<div align=\"center\"><font size=\"7\">I Am Unable To Obtain</font></div>";
    foreach($retired_different as $unabletoget)
        {
        echo "<img src=\"" . $unabletoget . "\">";
        }
    echo "</textarea>";
STOPTHISCRAZYTHING;

echo htmlentities($all);

?>

解决方案 C (将其包装在<pre>...</pre>标签中)

<?php
   $all = <<< STOPTHISCRAZYTHING
    <pre>
    echo "<br><br><textarea rows=\"30\" cols = \"100\">";
    echo "<div align=\"center\"><font size=\"7\">I Have</font></div>";
    foreach($same as $match)
        {
        echo "<img src=\"" . $match . "\">";
        }
    echo "<div align=\"center\"><font size=\"7\">I Need</font></div>";
    foreach($different as $diff)
        {
        if(!in_array($diff, $reject))
        {
        echo "<img src=\"" . $diff . "\">";
        }
        }
    echo "<div align=\"center\"><font size=\"7\">I Am Unable To Obtain</font></div>";
    foreach($retired_different as $unabletoget)
        {
        echo "<img src=\"" . $unabletoget . "\">";
        }
    echo "</textarea></pre>";
STOPTHISCRAZYTHING;

echo $all;

?>
于 2012-04-10T21:53:06.973 回答