2008-10-12 38 views
5

在其中一个textarea用于提交我的网站代码,我有可能出现沿以下线的东西代码:XHTML和内部的文字区域

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

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

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

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

回答

8

是有原因,你试图把<p><textarea>?因为你发现它是无效的。如果是为了显示(即,显示代码),它应译为:

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

超越验证问题,允许任意标签(未正确编码如上)显示可以是一个巨大的安全问题。确保任何用户提供的输入在显示之前已经过适当的消毒处理是至关重要的。

+0

出于某种原因,我想HTML实体不会textarea的(哑)中显示。将HTML实体转换为字符,然后所有回来的人似乎都这样做:) – 2008-10-12 21:49:04

0

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

0

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

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

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

<p>文本</P >

1

我是正确的思维你试图让一个所见即所得的编辑器,如TinyMCE的?大部分似乎做的是在textarea中使用HTML实体,并通过JavaScript将其转换为HTML。

3

CDATA部分会成为您的选择吗?

<textarea><![CDATA[ 
    <p>Blah</p> 
]]></textarea> 
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; 
}