Mögliche Zeilenumbrüche in einem Textfeld Feld hinzufügen, während es XHTML 1.0 gültig zu halten?

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

Frage

EDIT: Nach meinem Beitrag Re-Lektüre Ich glaube, ich bin ein wenig unklar zu sein, was das Problem ist. Lassen Sie mich versuchen, wieder Phrase es:

Die Benutzer können Kommentare auf meiner Seite verlassen, um in einem Formular ein Textfeld Feld. Es sollte möglich sein, Zeilenumbrüche im Kommentar mit <br /> hinzuzufügen. Der Kommentar dann als String in einer MySQL-Datenbank gespeichert ist (entging es sicher zu machen) und später aus der Datenbank abgerufen und auf der Website angezeigt. Regelmäßige Zeilenumbrüche werden nicht erkannt, wenn der Kommentar angezeigt wird.

Die Benutzer können ihre Kommentare bearbeiten, und in diesem Fall wird der ursprüngliche Kommentar wird in einem Textfeld Feld angezeigt (siehe Bild unten) geändert werden. Das Problem ist, dass, wenn es irgendeine <br /> vorhanden ist, wird der Code nicht gültig XHTML 1.0 (siehe Fehlermeldung unten).

Kann ich den Code gültig jede andere Art von Zeilenumbruch mit? Wie in den Kommentaren erwähnte, bricht regelmäßig Linie in Kombination mit xml: space = „preserve“ funktioniert nicht (Zeilenumbrüche in dem Textfeld angezeigt werden, aber nicht, wenn der Kommentar als normaler Text auf der Website angezeigt)


Original Frage:

Ich habe ein Web-Formular, die ein Textfeld Feld enthalten Kommentare zu verlassen, und ich will es in der Lage sein, Zeilenumbrüche hinzufügen mit <br />. Im Folgenden finden Sie ein einfaches Beispiel:


(Quelle: shipit.se )

Es wie beabsichtigt funktioniert, aber es nicht als XHTML 1.0 transitional zu validieren, wenn der W3C-Validierung Service. Das ist der Fehler, den ich bekommen:

  
      
  1. Error Line 90, Spalte 1587: Dokumententyp nicht erlaubt Element "br" hier
  2.   
     

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

     

Das Element oben genannt wurde in einem Kontext gefunden, wo es nicht erlaubt ist. Dies könnte bedeuten, dass Sie falsch verschachtelte Elemente haben - wie zum Beispiel eines „Stil“ Element in dem „Körper“ Abschnitt statt im „Kopf“ -. Oder zwei Elemente, die sie überlappen (was nicht erlaubt ist)

     

Eine häufige Ursache für diesen Fehler ist die Verwendung von XHTML-Syntax in HTML-Dokumenten. Aufgrund HTML-Regeln implizit geschlossener Elemente, kann dieser Fehler Kaskadeneffekte erstellen. Zum Beispiel: „selbstschließend“ Tags für „Meta“ und „Link“ im „Kopf“ -Abschnitt eines HTML-Dokumente XHTML kann den Parser veranlassen, das Ende des „Kopf“ Abschnitts und den Beginn des „Körpers zu schließen "Abschnitt (wo‚link‘und‚meta‘sind nicht erlaubt, daher der gemeldete Fehler).

Gibt es eine Möglichkeit, die Zeilenumbrüche gültigen Code zu machen, oder muss ich eine Abhilfe finden (wie zB mit speziellen Tags für Zeilenumbrüche in dem Textfeld und dann mit <br /> ersetzt später, wenn der Kommentar angezeigt wird)?

War es hilfreich?

Lösung

Von der DTD :

  

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

In der XHTML-Code Ihrer Seite kann ein <textarea> nur Text enthalten (#PCDATA), und Sie können nicht verschachtelt keine XHTML-Elemente innerhalb des <textarea>.

Ihre Fragen scheinen zwei verschiedene Dinge zu zeigen. Das Bild zeigt „<br />“ in eine <textarea> geschrieben, während die Nachricht von dem W3C-Validator wird unter Bezugnahme auf ein <br /> Element in das XHTML Ihrer Seite innerhalb des <textarea> Elements geschrieben.

Im ersten Fall mit „Test<br />line break“ erscheinen dem Benutzer im Textbereich unter Verwendung der entsprechenden Einheiten durchgeführt wird, so wie altCognito schrieb:

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

Alles, was vom Anwender eingegeben hat wird, die dann in einem <textarea> auf einer neuen Seite wieder angezeigt wird codiert werden sollte (das heißt Verwendung Einheiten für &, ", ', < und >).

Wenn Sie wollen, einen Eintrag des Benutzers angezeigt werden:

  

Test<br />line Pause

... als ...

  

Test
  Zeilenumbruch

... in einem anderen Textbereich, dann müssen Sie analysieren, was in den ursprünglichen <textarea> eingegeben wurde und die vom Benutzer eingegebenen <br />s mit normalen Zeilenumbrüche ersetzen. sehen Sie Lucero Antwort .

Andere Tipps

Haben Sie versucht, ein xml:space="preserve" Attribut hinzufügen und verwenden einfach nur normale Zeilenumbrüche?

Warum nicht regelmäßig Zeilenumbrüche? Diejenigen, gut funktionieren.

Wenn Sie <br /> angezeigt werden soll, müssen Sie diese Entitäten kodieren:

&lt;br /&gt;

Ich habe gerade dies und funktioniert.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top