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 额外的结束标签.现在您的可编辑文本已从表单中泄漏出来,不再是待编辑文本的一部分。