Posible añadir saltos de línea en un campo de área de texto mientras se mantiene XHTML 1.0 válido?
-
09-09-2019 - |
Pregunta
EDIT: Después de volver a leer mi post creo que estoy siendo un poco confuso sobre cuál es el problema. Voy a tratar de volver a la frase que:
Los usuarios pueden dejar comentarios en un sitio web mediante un campo de área de texto en un formulario. Debería ser posible añadir saltos de línea en el comentario mediante <br />
. El comentario se almacena como una cadena en una base de datos MySQL (escapó para que sea seguro) y posteriormente recuperada de la base de datos y se muestran en el sitio. saltos de línea regulares no son reconocidos cuando se visualiza el comentario.
Los usuarios pueden editar sus comentarios, y en ese caso se muestra el comentario original en un campo de área de texto a modificar (ver imagen abajo). El problema es que si hay cualquier <br />
presente, el código no es válido como XHTML 1.0 (ver mensaje de error a continuación).
¿Puedo hacer que el código válido el uso de cualquier otro tipo de salto de línea? Como se ha dicho en los comentarios, línea regular rompe en combinación con xml: space = "preserve" no funciona (saltos de línea se muestran en el campo área de texto, pero no cuando se muestra el comentario como texto normal en el sitio)
pregunta original:
Tengo un formulario web que incluye un campo de área de texto para dejar comentarios, y yo quiero que sea capaz de añadir saltos de línea utilizando <br />
. A continuación se muestra un ejemplo sencillo:
(fuente: shipit.se )
funciona como está previsto, sin embargo, no valida como XHTML 1.0 de transición cuando se utiliza el servicio de validación W3C. Este es el error que consigo:
- Error de Línea 90, 1587 Columna: tipo de documento no permite elemento "br" aquí
…ription" rows="0" cols="0">Test<br />line break</textarea></dd><dt class="cha
El elemento nombrado arriba fue encontrado en un contexto en el que no está permitido. Esto podría significar que usted tiene elementos anidados de forma incorrecta - como un elemento de "estilo" en la sección "cuerpo" en lugar de "cabeza" dentro -. O dos elementos que se solapan (que no está permitido)
Una causa común de este error es el uso de la sintaxis XHTML en los documentos HTML. Debido a las normas de elementos implícitamente cerrados de HTML, este error puede crear efectos en cascada. Por ejemplo, el uso de etiquetas de "auto-cierre" de XHTML para "meta" y "enlace" en la sección "cabeza" de un documento HTML puede hacer que el programa de análisis para inferir el final de la sección "cabeza" y el comienzo del "cuerpo "sección (donde 'link' y 'meta' no están permitidos, por lo que el error informado).
¿Hay una manera de hacer los cortes de línea de código válido, o necesito encontrar una solución (como por ejemplo el uso de etiquetas específicas para los saltos de línea en el campo de área de texto y luego reemplazarlos con <br />
más adelante cuando se muestra el comentario)?
Solución
Desde el DTD :
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
En el código XHTML de la página, un <textarea>
sólo puede contener texto (#PCDATA
), y se puede anidar los elementos XHTML dentro del <textarea>
.
Sus preguntas parece mostrar dos cosas diferentes. La imagen muestra "<br />
" escrito en un <textarea>
, mientras que el mensaje del W3C Validador se refiere a un elemento de <br />
escrita en el XHTML de la página dentro del elemento <textarea>
.
En el primer caso, que tiene "Test<br />line break
" aparecerá al usuario en el área de texto se realiza mediante el uso de las entidades apropiadas, tal como altCognito escribió:
<textarea>Test<br />line break</textarea>
Cualquier cosa que está siendo introducida por el usuario que se vuelve a mostrar a continuación, dentro de un <textarea>
en una nueva página debe ser codificada (es decir, las entidades de uso para &
, "
, '
, <
, y >
).
Si desea mostrar la entrada de un usuario:
ruptura Test
<br />
line
... como ...
Prueba
salto de línea
... dentro de otra área de texto, a continuación, tendrá que analizar lo que se ha entrado en la <textarea>
original y sustituir los <br />
s introducidos por el usuario, con saltos de línea normales. Vea de Lucero respuesta .
Otros consejos
¿Usted ha intentado añadir un atributo xml:space="preserve"
y utilizar saltos de línea simplemente normales?
¿Por qué no utilizar saltos de línea regulares? Los que trabajan muy bien.
Si desea que aparezca <br />
, es necesario codificar las entidades:
<br />
Acabo de hacer esto y funciona.
<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>