EOD解析内容

时间:2015-01-02 18:52:07

标签: php

我正在尝试在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会允许表单并相应地回显变量,所以问题是,我如何制作它以便在回显时不会关闭标记作为价值。

1 个答案:

答案 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将是一个悬挂/非法的额外结束标签。现在您的可编辑文本已从表单中泄露出来,不再是文本编辑的一部分。