2008-10-12 8 views
5

Sur un site de la mine dans laquelle une zone de texte est utilisé pour la soumission, j'ai un code qui peut apparaître quelque chose le long des lignes de ce qui suit:XHTML et le code à l'intérieur textareas

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

Lors de la validation (XHTML 1.0 Transitional) , cette erreur se produit,

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

Si ce n'est pas une méthode valide, alors qu'est-ce qui est attendu? Je pourrais faire une solution de contournement avec un événement JavaScript de chargement, mais cela semble inutile. Cela n'affecte pas la sortie, mais je préfère que mon site soit validé.

Répondre

8

est-il une raison pour laquelle vous essayez de mettre un <p> dans <textarea>? Comme vous l'avez découvert, ce n'est pas valide. si elle est à des fins d'affichage (par exemple, le code montrant) il devrait être traduit:

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

au-delà des problèmes de validation, ce qui permet des balises arbitraires (qui ne sont pas correctement encodées comme ci-dessus) pour afficher peut être un énorme problème de sécurité. Il est primordial de s'assurer que toute entrée fournie par l'utilisateur a été correctement nettoyée avant qu'elle ne soit affichée.

+0

Pour une raison quelconque, je pensais les entités HTML n'afficher dans le textarea (muet). Convertir les entités HTML en caractères, puis tous en arrière semble l'avoir fait :) –

0

Vous pouvez omettre les étiquettes dans la zone de texte et lorsque vous avez besoin de nouvelles lignes, utilisez \ n Sinon, utilisez &lt;p&gt; et &lt;/p&gt; à la place de vos étiquettes.

0

Vous pouvez utiliser une fonction onload pour remplacer les balises de début et de fin du contenu de la zone de texte.

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

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

<p> texte </p >

1

Suis-je raison de penser que vous essayez de faire un éditeur WYSIWYG, comme TinyMCE? Ce que le plus semble faire est d'utiliser des entités HTML dans le textarea et le convertir en HTML via JavaScript.

3

Une section CDATA serait-elle une option pour vous?

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

vous pouvez utiliser cette fonction sur les données affichées

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