259 votes

Remplacer les caractères de saut de ligne par <br /> dans la vue ASP.NET MVC Razor

J’ai un contrôle de zone de texte qui accepte une entrée. Je suis en train de rendre plus tard ce texte à une vue en utilisant simplement :

@Model.CommentText

C’est codage correctement toutes les valeurs. Cependant, je veux remplacer les caractères de saut de ligne avec `` et je ne peux pas trouver un moyen pour s’assurer que les nouvelles balises br n’obtenir encodés. J’ai essayé à l’aide de HtmlString mais n’avez pas eu de chance encore.

722voto

Jacob Krall Points 10327

Utilisez la propriété white-space CSS au lieu de vous ouvrant à des vulnérabilités XSS !

118voto

Omar Points 16654

Essayez les solutions suivantes:

@MvcHtmlString.Create(Model.CommentText.Replace(Environment.NewLine, "<br />"))

Mise à jour:

Selon marcind's de commentaire sur cette question, l'ASP.NET MVC équipe cherche à mettre en place quelque chose de similaire à l' <%: et <%= pour le moteur de vue Razor.

Mise à jour 2:

Nous pouvons nous adresser toute question à propos de codage HTML dans une discussion sur les entrées de l'utilisateur, mais assez de ce qui existe déjà.

De toute façon, prendre soin de potentiel nocif saisie de l'utilisateur.

@MvcHtmlString.Create(Html.Encode(Model.CommentText).Replace(Environment.NewLine, "<br />"))

Mise à jour 3 (Asp.Net MVC 3):

@Html.Raw(Html.Encode(Model.CommentText).Replace("\n", "<br />"))

5voto

Akaoni Points 91

En appliquant le principe SEC à Omar solution, voici un HTML Helper extension:

using System.Web.Mvc;
using System.Text.RegularExpressions;

namespace System.Web.Mvc.Html {
    public static class MyHtmlHelpers {
        public static MvcHtmlString EncodedReplace(this HtmlHelper helper, string input, string pattern, string replacement) {
            return new MvcHtmlString(Regex.Replace(helper.Encode(input), pattern, replacement));
        }
    }
}

D'utilisation (avec une amélioration de la regex):

@Html.EncodedReplace(Model.CommentText, "[\n\r]+", "<br />")

Cela a aussi l'avantage de mettre moins de fardeau de la preuve sur le Rasoir de Vue de développeur pour assurer la sécurité contre les failles XSS.


Mon souci avec Jacob solution est que le rendu de la ligne des pauses du CSS pour les pauses du HTML sémantique.

4voto

Andrea Points 681

J’avais besoin de diviser un texte en paragraphes (balises « p »), j’ai donc créé un programme d’assistance simple à l’aide de certaines des recommandations dans les réponses précédentes (Merci les gars).

Utilisation :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X