Possível adicionar quebras de linha em um campo textarea, mantendo-o XHTML 1.0 válido?
-
09-09-2019 - |
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:
(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:
- 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)?
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<br />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:
<br />
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>