2008-10-12 27 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; 
}