I have an MVC3 app that has a details page. As part of that I have a description (retrieved from a db) that has spaces and new lines. When it is rendered the new lines and spaces are ignored by the html. I would like to encode those spaces and new lines so that they aren't ignored.
How do you do that?
I tried HTML.Encode but it ended up displaying the encoding (and not even on the spaces and new lines but on some other special characters)
-
Specifically with CSS: stackoverflow.com/questions/1011641/…Ciro Santilli OurBigBook.com– Ciro Santilli OurBigBook.com2015年06月15日 13:57:28 +00:00Commented Jun 15, 2015 at 13:57
8 Answers 8
Just style the content with white-space: pre-wrap;.
div {
white-space: pre-wrap;
}
<div>
This is some text with some extra spacing and a
few newlines along with some trailing spaces
and five leading spaces thrown in
for good
measure
</div>
9 Comments
white-space: pre-line; if you don't want the first line of each paragraph indented.abcd. If I do not include the css class, the text "abcd" appears at a certain place on the page. But when I include the css class the text "abcd" appears slightly lower on the page. Is there a way to avoid this? (I'm also not sure if this minor issue is specific to my app, but the app is small so I suspect it may not be)<div class="highlight due_regard"> (so it renders as <div class="highlight due_regard"> \n<div class="line-1">. You can see it when you "view source". If this is only a problem after the form, then you could just drop the br tag on L11, otherwise you'll want to change your render method to not emit any whitespace between the two divs (i.e., <div class="highlight due_regard"><div class="line-1">)have you tried using <pre> tag.
<pre>
Text with
multipel line breaks embeded between pre tag
will work and
also tabs..will work
it will preserve the formatting..
</pre>
3 Comments
You can use white-space: pre-line to preserve line breaks in formatting. There is no need to manually insert html elements.
.popover {
white-space: pre-line;
}
or add to your html element style="white-space: pre-line;"
1 Comment
white-space: pre-wrap; solution only supported rendering one newline character even when multiple newlines were present.You would want to replace all spaces with (non-breaking space) and all new lines \n with <br> (line break in html). This should achieve the result you're looking for.
body = body.replace(' ', ' ').replace('\n', '<br>');
Something of that nature.
3 Comments
I was trying the white-space: pre-wrap; technique stated by pete but if the string was continuous and long it just ran out of the container, and didn't warp for whatever reason, didn't have much time to investigate.. but if you too are having the same problem, I ended up using the <pre> tags and the following css and everything was good to go..
pre {
font-size: inherit;
color: inherit;
border: initial;
padding: initial;
font-family: inherit;
}
Comments
You can use <p> instead of <div>.
And also use this CSS:
word-wrap: break-word;
white-space: pre-wrap;
margin: 0 !important;
1 Comment
As you mentioned on @Developer 's answer, I would probably HTML-encode on user input. If you are worried about XSS, you probably never need the user's input in it's original form, so you might as well escape it (and replace spaces and newlines while you are at it).
Note that escaping on input means you should either use @Html.Raw or create an MvcHtmlString to render that particular input.
You can also try
System.Security.SecurityElement.Escape(userInput)
but I think it won't escape spaces either. So in that case, I suggest just do a .NET
System.Security.SecurityElement.Escape(userInput).Replace(" ", " ").Replace("\n", "<br>")
on user input. And if you want to dig deeper into usability, perhaps you can do an XML parse of the user's input (or play with regular expressions) to only allow a predefined set of tags. For instance, allow
<p>, <span>, <strong>
... but don't allow
<script> or <iframe>
Comments
Instead of using a div tag use a p tag inside a div tag which preserves line breaks.
But in case you have to use , you can inspire from this code:
<script>
$( document ).ready(function() {
var str = $("body").html();
var regex = /[\n]/g;
$("body").html(str.replace(regex, "<br>"));
});
</script>
Comments
Explore related questions
See similar questions with these tags.