EOD解析内容
EOD parses content
我试图在 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的开始和结束标签之间有变量,但我认为如果我把它放在值区域它不会给我错误。问题是布局在关闭文本区域的字符串中有关闭文本区域标签,然后浏览器解析第一个关闭文本区域之后的所有内容。
根据 PHP 文档,我的印象是 heredoc 将允许表单并相应地回显变量,所以问题是,我将如何制作它以使其不会关闭作为值回显时的标签。
<textarea>
没有 value
属性。正确的语法是
echo <<<EOD
<textarea>$your_content_here</textarea>
EOD;
请注意 echo
不是函数调用。虽然输入 (...)
不是错误,但它们也完全没有必要。
此外,如果您将 html 转储到该文本区域进行编辑,它会被浏览器解析。例如如果 html 包含一个本身具有 <textarea>...</textarea>
的表单,您的内容实际上会过早地终止文本区域。确保你 运行 你的 html 到 htmlspecialchars()
以防止这种情况发生。即
$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
您不能嵌套文本区域,因此标签 B 将被忽略,标签 C(来自您的 "text to edit")将终止 A 标签,标签 D 将是一个 dangling/illegal 额外的结束标签.现在您的可编辑文本已从表单中泄漏出来,不再是待编辑文本的一部分。
我试图在 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的开始和结束标签之间有变量,但我认为如果我把它放在值区域它不会给我错误。问题是布局在关闭文本区域的字符串中有关闭文本区域标签,然后浏览器解析第一个关闭文本区域之后的所有内容。
根据 PHP 文档,我的印象是 heredoc 将允许表单并相应地回显变量,所以问题是,我将如何制作它以使其不会关闭作为值回显时的标签。
<textarea>
没有 value
属性。正确的语法是
echo <<<EOD
<textarea>$your_content_here</textarea>
EOD;
请注意 echo
不是函数调用。虽然输入 (...)
不是错误,但它们也完全没有必要。
此外,如果您将 html 转储到该文本区域进行编辑,它会被浏览器解析。例如如果 html 包含一个本身具有 <textarea>...</textarea>
的表单,您的内容实际上会过早地终止文本区域。确保你 运行 你的 html 到 htmlspecialchars()
以防止这种情况发生。即
$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
您不能嵌套文本区域,因此标签 B 将被忽略,标签 C(来自您的 "text to edit")将终止 A 标签,标签 D 将是一个 dangling/illegal 额外的结束标签.现在您的可编辑文本已从表单中泄漏出来,不再是待编辑文本的一部分。