5

在我的一个使用 textarea 提交的网站上,我的代码可能会出现以下内容:

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

验证时(XHTML 1.0 过渡),出现此错误,

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

如果这不是一个有效的方法,那么会发生什么?我可以使用 onload JavaScript 事件来解决问题,但这似乎是不必要的。无论如何这不会影响输出,但我宁愿我的网站验证。

4

6 回答 6

8

你有什么理由试图把一个<p>inside <textarea>?正如你发现它是无效的。如果是出于显示目的(即显示代码),则应翻译:

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

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

于 2008-10-12T21:16:34.803 回答
3

CDATA 部分是否适合您?

<textarea><![CDATA[
    <p>Blah</p>
]]></textarea>
于 2008-10-12T22:03:22.460 回答
1

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

于 2008-10-12T21:34:46.233 回答
0

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

于 2008-10-12T21:17:35.253 回答
0

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

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

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

<p>文字</p>

于 2008-10-12T21:30:14.557 回答
0

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

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;
}
于 2008-12-15T10:20:26.333 回答