Possibilité d'ajouter des sauts de ligne dans un champ textarea tout en gardant valide XHTML 1.0?

StackOverflow https://stackoverflow.com/questions/755944

Question

EDIT: Après avoir relu mon post, je pense que je me fais un peu clair sur ce que le problème est. Permettez-moi de reformuler ce:

Les utilisateurs peuvent laisser des commentaires sur mon site en utilisant un champ textarea sous une forme. Il devrait être possible d'ajouter des sauts de ligne dans le commentaire en utilisant <br />. Le commentaire est alors stocké sous la forme d'une chaîne dans une base de données MySQL (échappé pour le rendre sûr) et plus tard extraites de la base de données et affiché sur le site. les sauts de ligne régulière ne sont pas comptabilisés lorsque le commentaire est affiché.

Les utilisateurs peuvent modifier leurs commentaires, et dans ce cas le commentaire original est affiché dans un champ textarea à modifier (voir image ci-dessous). Le problème est que s'il y en a une de <br />, le code est valide XHTML 1.0 (voir le message d'erreur ci-dessous).

Puis-je faire le code valide en utilisant tout autre type de saut de ligne? Comme il est indiqué dans les commentaires, la ligne régulière se casse en combinaison avec xml: space = « conserver » ne fonctionne pas (les sauts de ligne sont affichés dans le champ textarea, mais pas lorsque le commentaire est affiché comme du texte normal sur le site)


Question d'origine:

J'ai un formulaire Web qui comprend un champ textarea pour laisser des commentaires, et je veux que ce soit en mesure d'ajouter des sauts de ligne à l'aide <br />. Ci-dessous un exemple simple:

dump écran"
(source: shipit.se )

Il fonctionne comme prévu, mais il ne valide pas XHTML 1.0 Transitional lors de l'utilisation du service de validation du W3C. Ceci est l'erreur que je reçois:

  
      
  1. Ligne d'erreur 90, colonne 1587: type de document ne permet pas d'élément "br" ici
  2.   
     

…ription" rows="0" cols="0">Test<br />line break</textarea></dd><dt class="cha

     

L'élément nommé ci-dessus a été trouvé dans un contexte où il est interdit. Cela pourrait signifier que vous avez tort des éléments imbriqués - comme un élément « de style » dans la section « corps » au lieu de « tête » à l'intérieur -. Ou deux éléments qui se chevauchent (ce qui est interdit)

     

Une cause courante de cette erreur est l'utilisation de la syntaxe XHTML dans les documents HTML. En raison des règles de HTML d'éléments implicitement fermés, cette erreur peut créer des effets en cascade. dans la section « tête » d'un document HTML, par exemple, en utilisant les balises « auto-fermeture » de XHTML pour « lien » « méta » et peut provoquer l'analyseur pour en déduire la fin de la section « tête » et le début du « corps "section (où « lien » et « méta » ne sont pas autorisés, d'où l'erreur signalée).

Y at-il un moyen de rendre la ligne casse code valide, ou ai-je besoin de trouver une solution de contournement (comme par exemple en utilisant des balises spécifiques pour les sauts de ligne dans le champ textarea puis en les remplaçant par <br /> plus tard lors de l'affichage du commentaire)?

Était-ce utile?

La solution

De la DTD :

  

<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->

Dans le code XHTML de votre page, un <textarea> ne peut contenir que du texte (#PCDATA), et vous ne pouvez pas imbriquer des éléments de XHTML dans le <textarea>.

Vos questions semblent montrer deux choses différentes. L'image montre « <br /> » écrit dans un <textarea>, alors que le message du validateur du W3C fait référence à un élément de <br /> écrit dans le XHTML de votre page dans l'élément <textarea>.

Dans le premier cas, ayant « Test<br />line break » apparaît à l'utilisateur dans la zone de texte se fait à l'aide des entités appropriées, comme altCognito a écrit:

<textarea>Test&lt;br /&gt;line break</textarea>

Tout ce qui est d'être entré par l'utilisateur qui est ensuite réaffichée dans un <textarea> sur une nouvelle page doit être codé (à savoir, les entités d'utilisation pour &, ", ', < et >).

Si vous voulez afficher l'entrée d'un utilisateur:

  

break Test<br />line

... comme ...

  

test
  saut de ligne

... dans une autre zone de texte, alors vous aurez besoin d'analyser ce qui a été entré dans le <textarea> original et remplacer les <br />s entrées par l'utilisateur avec des sauts de ligne normale. Voir réponse Lucero.

Autres conseils

Avez-vous essayé d'ajouter un attribut xml:space="preserve" et utiliser les sauts de ligne tout simplement normale?

Pourquoi ne pas utiliser les sauts de ligne réguliers? Ceux-ci travaillent très bien.

Si vous voulez <br /> apparaisse, vous devez encoder ces entités:

&lt;br /&gt;

Je viens de faire cela et fonctionne.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top