文本区域内的 XHTML 和代码

XHTML and code inside textareas

提问人:Elle H 提问时间:10/13/2008 更新时间:12/15/2008 访问量:3817

问:

在我的一个使用文本区域进行提交的网站上,我有代码可以显示如下内容:

<textarea><p>text</p></textarea>

验证 (XHTML 1.0 Transitional) 时,会出现此错误,

line 88 column 50 - Error: document type does not allow element "p" here

如果这不是一个有效的方法,那么预期是什么?我可以对 onload JavaScript 事件进行解决,但这似乎是不必要的。无论如何,这不会影响输出,但我宁愿我的网站进行验证。

验证 XHTML

评论


答:

8赞 Owen 10/13/2008 #1

你试图把一个 in 是有原因的吗?正如你所发现的,它是无效的。如果用于显示目的(即显示代码),则应将其翻译为:<p><textarea>

<textarea>&lt;p&gt;text&lt;/p&gt;</textarea>

除了验证问题之外,允许显示任意标签(未正确编码)可能是一个巨大的安全问题。最重要的是,要确保用户提供的任何输入在显示之前都经过适当的清理。

评论

0赞 Elle H 10/13/2008
出于某种原因,我认为 HTML 实体不会显示在 textarea 中(哑)。将 HTML 实体转换为字符,然后它们似乎都已完成:)
0赞 acrosman 10/13/2008 #2

您可以省略文本区域中的标签,当需要新行时,请使用 \n 否则使用 和 代替您的标签。&lt;p&gt;&lt;/p&gt;

0赞 Dbassx 10/13/2008 #3

您可以使用 onload 函数来替换 textarea 内容的开始和结束标记。

eg: replace < > with &lt; &gt;

<textarea cols="" rows="">&lt;p&gt;text&lt;/p&gt;</textarea>

<p>text</p>

1赞 Ross 10/13/2008 #4

我认为您尝试制作所见即所得的编辑器(例如 TinyMCE)是对的吗?大多数人似乎在 中使用 HTML 实体并通过 JavaScript 将其转换为 HTML。textarea

3赞 nickf 10/13/2008 #5

CDATA 部分是否适合您?

<textarea><![CDATA[
    <p>Blah</p>
]]></textarea>
0赞 Jon 12/15/2008 #6

您可以对发布的数据使用此功能

function clean_data($value) {
    if (get_magic_quotes_gpc()) { $value = stripslashes($value); }
    $value = addslashes(htmlentities(trim($value)));
    $value = str_replace("\'", "&#39;", $value);
    $value = str_replace("'", "&#39;", $value);
    $value = str_replace(":", "&#58;", $value);
    return $value;
}