PHP:将 HTML 生成为纯文本并放入文本框问题
Posted
技术标签:
【中文标题】PHP:将 HTML 生成为纯文本并放入文本框问题【英文标题】:PHP: Generate HTML as plaintext and put in a textbox issue 【发布时间】:2016-04-29 06:41:41 【问题描述】:在这里引用上一个问题html Generator: Convert HTML to PlainText and put in a textbox using php
现在即使回复产生了预期的结果,我也遇到了一些问题。
我得到了这 3 页:
Page1.php
// This page contain two columns, one for the form that take the
variables, and other one that contain the iframe that must to display the plaintext
Page2.php
// Cutted code that take $_GET variables and store in $_SESSION
$html = file_get_contents('page3.php');
echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116" value="'. $html .'"></textarea>';
Page3.php
// This is the file page3.php that must to be in plaintext, but first
it must take the variables from $_SESSION and complete the code
现在我得到了纯文本文件,但变量没有被传递,因为我已经将它们存储在会话中。我得到的是 $var 而不是值。
文本框只显示文件的一半,不显示<link>
和整个<style>
标签。
【问题讨论】:
<textarea>
没有value
。
弗雷德的意思是echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116">'.$html.'</textarea>';
@mplungjan 我在下面发布了一个答案,但老实说,我并不依赖您对此的评论。我正忙着测试它并没有看到它,因为我正在输入它。
没问题。我赞成你的回答
@mplungjan 谢谢,干杯
【参考方案1】:
<textarea>
没有value
。
您需要在标签内回显该变量。
$html = "Text here";
echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116">'. $html .'</textarea>';
“它必须从 $_SESSION 中获取变量并完成代码”
另请注意,您正在使用会话。确保会话开始时在该页面的顶部以及可能正在使用会话的任何其他页面具有 session_start();
。
例子:
session_start();
if(isset($_SESSION['var']))
$_SESSION['var'] = "var";
else
echo "Session is not set.";
注意:确保您没有在标题之前输出。
如果您收到标头发送通知/警告,请在 Stack 上查询以下内容:
How to fix "Headers already sent" error in PHP将error reporting 添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存阶段显示错误,而不是在生产阶段。
证明成功的测试示例,在<textarea>
中回显var
:
<?php
session_start();
if(isset($_SESSION['var']))
$_SESSION['var'] = "var";
$var = $_SESSION['var'];
else
echo "Session is not set.";
// $html = "Text here";
$html = $var;
echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116">'. $html .'</textarea>';
编辑:
根据以下模型将 GET 数组分配给会话数组。
<?php
session_start();
$_GET ['lb1'] = "lb1";
$lb1 = $_GET ['lb1'];
$_GET ['lb1'] = $_SESSION["lb1"];
$_SESSION["lb1"] = $lb1;
//echo "Hey LB1 " . $lb1;
$lb1_session = $lb1;
$_GET ['lb2'] = "lb2";
$lb2 = $_GET ['lb2'];
$_GET ['lb2'] = $_SESSION["lb2"];
$_SESSION["lb2"] = $lb2;
//echo "Hey LB2" . $lb2;
$lb2_session = $lb2;
$html = $lb1_session . "\n". $lb2_session;
echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116">'. $html .'</textarea>';
?>
<a href="check_get_sessions.php">Check GET sessions</a>
check_get_sessions.php
<?php
session_start();
if(isset($_SESSION['lb1']))
$lb1_session = $_SESSION['lb1'];
echo $lb1_session;
if(isset($_SESSION['lb2']))
$lb2_session = $_SESSION['lb2'];
echo $lb2_session;
$html = $lb1_session . "\n". $lb2_session;
echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116">'. $html .'</textarea>';
这是我能给你的最好的。
在执行$html = $lb1_session . "\n". $lb2_session;
时,您可以使用"\n"
作为每个要回显的变量之间的分隔符。或者,如果你愿意,<br>
;选择权在你。
上面将$html
变量分配给链式变量。其他可能需要添加的可以添加$lb3, $lb4, $lb5
等。
祝你好运! (幸运)
【讨论】:
谢谢,那个愚蠢的错误消失了,现在文件显示正确了。使用错误报告我看到变量没有设置。你的回复有一点我看不懂,估计要传递的变量一共是8个,我怎么用$html = $var;
?
@andreaem 不客气。我使用$var
作为从会话数组中获取的示例变量,然后将其分配给$html
变量,然后在文本区域中回显。您在问题中声明您正在使用会话,因此我制作了一个快速测试文件来向您展示一个示例。
谢谢,如果它有效,我已经用我的变量名替换了 var 并且没有错误报告。关键是我得到了纯文本的完整文件,但是,这个文件包含一些变量,必须在输出为纯文本之前显示他的值,现在我得到 $var1 而不是“somevalue”,无论如何设置变量首先将内容放入文本框中?也许一个视觉例子可以更好地解释link
@andreaem 好吧,我会保留你现在为$html = file_get_contents('page3.php');
提供的内容,并使用我在关于echo '<textarea readonly style="border:none;resize:none" rows="50" cols="116">'. $html .'</textarea>';
的回答中发布的内容。很难准确地说出你的意思 “这个文件包含一些必须在输出之前显示他的值的变量” - 你可能需要使用 heredoc php.net/manual/en/… 或 nowdoc php.net/manual/en/…
在之前的回复中关注我的链接,将到达我正在处理的页面,我是意大利人,所以也许我无法解释我的意思。在使用随机值填写表单并单击生成的页面中,它将显示页面代码,在此页面中,您将看到我们有 $lb1、$lb2、$lb3 等。我必须首先为这些变量赋值显示输出,但即使我这样做,它也会显示 $lb1 因为它是文件的原始内容以上是关于PHP:将 HTML 生成为纯文本并放入文本框问题的主要内容,如果未能解决你的问题,请参考以下文章