2008-10-12 18 views
5

Auf einem Gelände von mir, in dem ein Textfeld für die Vorlage verwendet wird, habe ich Code, der etwas entlang der Linien der folgenden erscheinen:XHTML und Code in Textareas

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

Wenn die Validierung (XHTML 1.0) , dieser Fehler tritt auf,

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

Wenn dies keine gültige Methode ist, was wird erwartet? Ich könnte einen Workaround mit einem Onload-JavaScript-Ereignis durchführen, aber das scheint unnötig. Unabhängig davon hat das keinen Einfluss auf die Ausgabe, aber ich möchte lieber meine Website validieren.

Antwort

8

Gibt es einen Grund, warum Sie versuchen, eine <p> innerhalb <textarea> zu setzen? Wie du herausgefunden hast, ist es nicht gültig.

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

über Validierungsprobleme, so dass beliebige Tags (die wie oben nicht richtig codiert sind) zu kann eine große Sicherheitsproblem sein angezeigt: wenn es für die Anzeige ist (dh zeigt Code) sollte übersetzt werden. Es ist äußerst wichtig, sicherzustellen, dass alle vom Benutzer bereitgestellten Eingaben ordnungsgemäß bereinigt wurden, bevor sie angezeigt werden.

+0

Aus irgendeinem Grund, den ich HTML-Entitäten dachte nicht im Textbereich (stumm) angezeigt werden soll. Konvertiere die HTML-Entitäten in die Zeichen, dann scheinen alle wieder zu haben :) –

0

Sie können die Tags im Textbereich auslassen, und wenn Sie neue Zeilen benötigen, \ n Verwenden Sie andernfalls &lt;p&gt; und &lt;/p&gt; anstelle der Tags.

0

Sie könnten eine Onload-Funktion verwenden, um die Start- und End-Tags des Textarea-Inhalts zu ersetzen.

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

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

<p> Text </p >

1

Bin ich recht in der Annahme Ihr versucht, einen WYSIWYG-Editor, wie TinyMCE zu machen? Was am meisten zu tun scheint, ist die Verwendung von HTML-Entities in textarea und die Konvertierung in HTML über JavaScript.

3

Wäre ein CDATA-Bereich eine Option für Sie?

<textarea><![CDATA[ 
    <p>Blah</p> 
]]></textarea> 
0

können Sie diese Funktion auf den gebuchten Daten verwenden

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; 
}