Possível adicionar quebras de linha em um campo textarea, mantendo-o XHTML 1.0 válido?

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

Pergunta

EDIT: Depois de reler meu post Acho que estou sendo um pouco incerto sobre o que é o problema. Deixe-me tentar re-frase dele:

Os usuários podem deixar comentários em meu site usando um campo textarea em um formulário. Deve ser possível adicionar quebras de linha no comentário usando <br />. O comentário é então armazenado como uma string em um mysql-banco de dados (escapou para torná-la segura) e mais tarde recuperado do banco de dados e exibidos no site. quebras de linha regulares não são reconhecidas quando o comentário é exibido.

Os usuários podem editar os seus comentários, e nesse caso o comentário original é exibido em um campo textarea a ser modificado (veja imagem abaixo). O problema é que se houver algum <br /> presente, o código não é válido como XHTML 1.0 (veja mensagem de erro abaixo).

Posso fazer o código válido usando qualquer outro tipo de quebra de linha? Como dito nos comentários, quebras de linha regulares em combinação com xml:. Space = "preserve" não funciona (quebras de linha são exibidos no campo textarea, mas não quando o comentário é exibido como texto normal no site)


pergunta original:

Eu tenho um formulário da Web que inclui um campo textarea para deixar comentários, e eu quero que ele seja capaz de adicionar quebras de linha usando <br />. Abaixo está um exemplo simples:

despejo de tela
(fonte: shipit.se )

Ele funciona como se pretende, no entanto, ele não valida como XHTML 1.0 Transitório ao usar o serviço de validação do W3C. Este é o erro que eu recebo:

  1. Erro de linha 90, coluna 1587: tipo de documento não permite elemento "br" aqui

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

O elemento acima mencionado foi encontrado em um contexto em que não é permitido. Isto poderia significar que você tem elementos incorretamente aninhados - como um elemento de "estilo" na seção "corpo" em vez de dentro "cabeça" -. Ou dois elementos que se sobrepõem (o que não é permitido)

Uma causa comum para este erro é o uso de sintaxe XHTML em documentos HTML. Devido às regras de elementos implicitamente fechados de HTML, este erro pode criar efeitos em cascata. Por exemplo, usando tags "auto-fechamento" do XHTML para "meta" e "link" na seção "cabeça" de um documento HTML pode causar o analisador para inferir o final da seção "cabeça" eo início do "corpo "seção (onde 'link' e 'meta' não são permitidos, daí o erro relatado).

Existe uma maneira de fazer o código válido quebras de linha, ou que eu preciso para encontrar uma solução alternativa (como por exemplo o uso de tags específicos para quebras de linha no campo textarea e, em seguida, substituindo-os por <br /> mais tarde, ao exibir o comentário)?

Foi útil?

Solução

A partir da DTD :

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

No código XHTML da sua página, um <textarea> só pode conter texto (#PCDATA), e você não pode aninhar quaisquer elementos XHTML dentro do <textarea>.

As suas perguntas parece mostrar duas coisas diferentes. Os shows imagem "<br />" escrito em um <textarea>, enquanto a mensagem do W3C Validator está se referindo a um elemento <br /> escrito no XHTML de sua página dentro do elemento <textarea>.

No primeiro caso, ter "Test<br />line break" aparecer para o usuário na área de texto é feito usando as entidades competentes, assim como altCognito escreveu:

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

Tudo o que está sendo digitado pelo usuário que é então exibida novamente dentro de um <textarea> em uma nova página deve ser codificado (ou seja, usar entidades para &, ", ', < e >).

Se quiser exibir a entrada de um usuário:

Test<br />line pausa

... como ...

Test
quebra de linha

... dentro de outra área de texto, então você vai precisar para analisar o que foi inserido no <textarea> original e substituir os <br />s introduzidos pelo utilizador com quebras de linha normais. Veja de Lucero resposta .

Outras dicas

Você tentou adicionar um atributo xml:space="preserve" e usar quebras de linha normais apenas simples?

Por que não usar quebras de linha regulares? Aqueles trabalho muito bem.

Se você quiser <br /> a aparecer, você precisa codificar essas entidades:

&lt;br /&gt;

Eu só fiz isso e obras.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top