Search code examples
c#asp.net-mvcnewlinehtml-encode

ASP.NET MVC Html.Encode - New lines


Html.Encode seems to simply call HttpUtility.HtmlEncode to replace a few html specific characters with their escape sequences.

However this doesn't provide any consideration for how new lines and multiple spaces will be interpretted (markup whitespace). So I provide a text area for the a user to enter a plain text block of information, and then later display that data on another screen (using Html.Encode), the new lines and spacing will not be preserved.

I think there are 2 options, but maybe there is a better 3rd someone can suggest.

One option would be to just write a static method that uses HtmlEncode, and then replaces new lines in the resulting string with <br> and groups of multiple spaces with &nbsp;

Another option would be to mess about with the white-space: pre attribute in my style sheets - however I'm not sure if this would produce side effects when Html helper methods include new lines and tabbing to make the page source pretty.

Is there a third option, like a global flag, event or method override I can use to change how html encoding is done without having to redo the html helper methods?


Solution

  • HtmlEncode is only meant to encode characters for display in HTML. It specifically does not encode whitespace characters.

    I would go with your first option, and make it an extension method for HtmlHelper. Something like:

    public static string HtmlEncode(this HtmlHelper htmlHelper,
                                    string text, 
                                    bool preserveWhitespace)
    {
        // ...
    }
    

    You could use String.Replace() to encode the newlines and spaces (or Regex.Replace if you need better matching).