Possibilità di aggiungere interruzioni di riga in un campo textarea mantenendolo XHTML 1.0 valido?

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

Domanda

Modifica dopo aver riletto il mio post penso di essere un po 'poco chiaro su quello che è il problema. Vorrei cercare di ri-frase è:

Gli utenti possono lasciare commenti sul mio sito utilizzando un campo textarea in una forma. Dovrebbe essere possibile aggiungere interruzioni di riga nel commento utilizzando <br />. Il commento viene quindi memorizzato come una stringa in un mysql-database (sfuggito per renderlo sicuro) e poi recuperate dal database e visualizzati sul sito. interruzioni di riga regolari non sono riconosciuti quando viene visualizzato il commento.

Gli utenti possono modificare i loro commenti, e in questo caso il commento originale viene visualizzato in un campo textarea da modificare (vedi immagine sotto). Il problema è che se ci sono <br /> presenti, il codice non è valido come XHTML 1.0 (vedi seguente messaggio di errore).

Posso fare il codice valido con qualsiasi altro tipo di interruzione di linea? Come indicato nei commenti, linea regolare rompe in combinazione con xml: space = "preserve" non funziona (interruzioni di riga vengono visualizzati nel campo textarea, ma non quando il commento viene visualizzato come testo normale sul sito)


domanda iniziale:

Ho un modulo web, che include un campo textarea di lasciare commenti, e io voglio che sia in grado di aggiungere interruzioni di riga utilizzando <br />. Di seguito è riportato un semplice esempio:

screen dump
(fonte: shipit.se )

E 'funziona come previsto, tuttavia non convalida come XHTML 1.0 Transitional quando si utilizza il servizio di validazione del W3C. Questo è l'errore che ottengo:

  
      
  1. Errore Linea 90, Colonna 1587: tipo di documento non consente elemento "br" qui
  2.   
     

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

     

L'elemento di nome sopra è stato trovato in un contesto in cui non è permesso. Ciò potrebbe significare che avete gli elementi in modo non corretto annidati - come un elemento di "stile" nella sezione "corpo" al posto di "testa" dentro -. O due elementi che si sovrappongono (che non è consentita)

     

Una causa comune di questo errore è l'uso della sintassi XHTML nei documenti HTML. A causa di regole di HTML di elementi implicitamente chiusi, questo errore può creare effetti a cascata. Ad esempio, utilizzando i tag "a chiusura" di XHTML per "link" nella sezione "testa" di un documento HTML "meta" e può causare il parser per dedurre la fine della sezione "testa" e l'inizio del "corpo "la sezione (dove 'link' e 'meta' non posso, da cui l'errore segnalato).

C'è un modo per rendere la linea rompe codice valido, o ho bisogno di trovare una soluzione alternativa (come ad esempio utilizzando i tag specifici per interruzioni di riga nel campo textarea e poi la loro sostituzione con <br /> più tardi quando si visualizza il commento)?

È stato utile?

Soluzione

DTD :

  

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

Nel codice XHTML della pagina, un <textarea> può contenere solo testo (#PCDATA), e non è possibile alcun nido elementi XHTML all'interno del <textarea>.

Le vostre domande sembra mostrare due cose diverse. L'immagine mostra "<br />", scritto in un <textarea>, mentre il messaggio dal W3C Validator si riferisce ad un elemento <br /> scritta nel XHTML della pagina all'interno dell'elemento <textarea>.

Nel primo caso, dopo aver "Test<br />line break" appaiono all'utente nell'area di testo viene fatto utilizzando le entità appropriate, così come altCognito ha scritto:

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

Tutto ciò che viene immesso dall'utente che viene poi visualizzata di nuovo all'interno di un <textarea> su una nuova pagina deve essere codificato (vale a dire, utilizzare enti per &, ", ', <, e >).

Se si desidera visualizzare l'ingresso di un utente:

  

pausa Test<br />line

... come ...

  

Prova
  interruzione di linea

... all'interno di un'altra area di testo, allora si avrà bisogno di analizzare ciò che è stato inserito nel <textarea> originale e sostituire i <br />s inseriti dall'utente con le normali interruzioni di riga. Vedi di Lucero risposta .

Altri suggerimenti

Avete provato ad aggiungere un attributo xml:space="preserve" e utilizzare semplicemente normali interruzioni di riga?

Perché non usare linebreaks regolari? Coloro che funzionano bene.

Se si desidera visualizzare <br />, è necessario codificare quelle entità:

&lt;br /&gt;

ho appena fatto questo e funziona.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top