Renderizar una cadena en HTML y preservar espacios y saltos de línea


Tengo una aplicación MVC3 que tiene una página de detalles. Como parte de eso tengo una descripción (recuperada de una base de datos) que tiene espacios y nuevas líneas. Cuando se renderiza las nuevas líneas y espacios son ignorados por el html. Me gustaría codificar esos espacios y nuevas líneas para que no sean ignorados.

¿Cómo se hace eso?

Probé HTML.Codificar pero terminó mostrando la codificación (y ni siquiera en los espacios y líneas nuevas, sino en algunos otros caracteres especiales)

Author: Bergi, 2012-02-29

6 answers

Simplemente dale estilo al contenido con white-space: pre-wrap;.

Trabajando violín

 342
Author: pete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-29 02:15:27

Has intentado usar la etiqueta <pre>.

Http://jsfiddle.net/NweRa /

 28
Author: N30,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-29 02:04:17

Usted querría reemplazar todos los espacios con (espacio sin interrupción) y todas las nuevas líneas "\n " con br> (salto de línea en html). Esto debería lograr el resultado que estás buscando.

Body = body . reemplazar(' ',  ).reemplazar ('\n', 'br>");

Algo de esa naturaleza.

 8
Author: Developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-29 01:13:28

Puede usar espacio en blanco: pre-línea para preservar los saltos de línea en el formato. No es necesario insertar manualmente elementos html.

.popover {
    white-space: pre-line;    
}

O añadir a su elemento html style="white-space: pre-line;"

 7
Author: rafalkasa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-15 19:15:33

Estaba probando la técnica white-space: pre-wrap; indicada por pete, pero si la cuerda era continua y larga, simplemente se quedaba sin el contenedor, y no se deformaba por cualquier razón, no tenía mucho tiempo para investigar .. pero si usted también está teniendo el mismo problema, terminé usando las etiquetas <pre> y el siguiente css y todo estaba bien para ir..

pre {
font-size: inherit;
color: inherit;
border: initial;
padding: initial;
font-family: inherit;
}
 3
Author: Mohd Abdul Mujib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-20 19:03:51

Como mencionaste en la respuesta de @Developer, probablemente codificaría HTML en la entrada del usuario. Si está preocupado por XSS, probablemente nunca necesite la entrada del usuario en su forma original, por lo que también podría escapar (y reemplazar espacios y nuevas líneas mientras está en ello).

Tenga en cuenta que escapar en la entrada significa que debe usar @Html.Raw o cree un MvcHtmlString para renderizar esa entrada en particular.

También puedes probar

System.Security.SecurityElement.Escape(userInput)

Pero creo que tampoco escapará espacios. Así que en ese caso, sugiero simplemente hacer un. NET

System.Security.SecurityElement.Escape(userInput).Replace(" ", "&nbsp;").Replace("\n", "<br>")

En la entrada del usuario. Y si desea profundizar en la usabilidad, tal vez pueda hacer un análisis XML de la entrada del usuario (o jugar con expresiones regulares) para permitir solo un conjunto predefinido de etiquetas. Por ejemplo, permitir

<p>, <span>, <strong>

... pero no permitir

<script> or <iframe>
 0
Author: Mauricio Morales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-29 15:50:33