Rendering newlines in escaped html

2019-05-07 00:37发布

问题:

We have a display message that is auto-generated by default, but may be overridden by GET vars from the url. Since we need to treat the message as user input, it must be escaped for display. However, we want to retain the ability to include newlines.

Newlines as <br>
This won't work because escaping HTML destroys the <br> tag.

Newlines as \n
I can't figure out how to get \n to render as newlines. I thought putting it in a tag would render correctly, but no luck: http://jsfiddle.net/7L932/

回答1:

What you're doing is more or less fine, except for you should put \n character (newline), not the escape sequence in your html (and what Prinzhorn says also makes perfect sense, so I'll go upvote him).



回答2:

Escape the HTML, and then replace \n with <br>.

In case you want to use \n, I fix your fiddle for you http://jsfiddle.net/hr3bg/



回答3:

Your theory's sound, but \n is a not an HTML-recognised way of inserting a new line. It either comes in explicitly (as I've inserted in a new .linebreaks element) as a literal return in the markup, or, if you're using some intermediary scripting language that does recognise \n (like JS), do that (as I've done to your first .linebreaks with the jQuery code I inserted.

See my tweak to your example: http://jsfiddle.net/barney/7L932/2/