我正在尝试在textarea中回显布局文件,以便可以从在线界面编辑布局,但问题是,即使在PHP中的heredoc中,它仍然在解析布局。这是我输出EOD的代码;
echo (
<<<EOD
<div class="shadowbar">
<form method="post" action="index.php?action=acp&mode=layout">
<fieldset>
<legend>Advanced Layout Editor</legend>
<div class="input-group">
<textarea rows="8" placeholder="Layout File" name="layout" id="about" cols="100" value="$layoutFile"></textarea><br />
</div>
</fieldset>
<input class="Link LButton" type="submit" value="Submit Edits" name="submit" />
</form>
</div>
EOD
);
最初我在textarea的开始和结束标签之间有变量,但我想如果我把它放在值区域,它就不会给我错误。问题是布局在字符串中关闭了textarea标签,关闭了textarea,然后浏览器解析了第一个关闭textarea之后的所有内容。
从PHP文档中我得到的结论是,heredoc会允许表单并相应地回显变量,所以问题是,我如何制作它以便在回显时不会关闭标记作为价值。答案 0 :(得分:3)
<textarea>
没有value
属性。正确的语法是
echo <<<EOD
<textarea>$your_content_here</textarea>
EOD;
请注意echo
不是函数调用。虽然放(...)
不是错误,但它们也是完全不必要的。
另外,如果你将html转储到textarea进行编辑,它将被浏览器解析。例如如果html包含一个本身有<textarea>...</textarea>
的表单,那么你的内容实际上会过早地终止textarea。确保通过htmlspecialchars()
运行html以防止这种情况发生。即
$text_to_edit = '<textarea>foo</textarea> Please fill in the text box';
# Output your editor form
echo <<<EOD
<textarea>$text_to_edit</textarea>
EOD;
将为HTML生成此内容:
<textarea><textarea>foo</textarea>Please fill in the text box</textarea>
a b c d
你不能嵌套textareas,所以标签B将被忽略,标签C(从你的“文本编辑”)将终止A标签,标签D将是一个悬挂/非法的额外结束标签。现在您的可编辑文本已从表单中泄露出来,不再是文本编辑的一部分。