Как отображать как одинарные, так и двойные кавычки в текстовом поле или текстовой области

В базе данных строка данных имеет как одинарные, так и двойные кавычки.

Строка данных.

A'B"C

Когда он отображается в виде textbox или textarea, он автоматически кодируется в объекты html.

Код в представлении MVC, vm — это объект, связанный с нокаутом.

vm.field1('@Model.field1');

Отрисованный HTML.

A'B"C

Как мне сделать так, чтобы они оба снова отображались как одинарные и двойные кавычки?

Я попытался закодировать двойные кавычки в ":

vm.field1("Html.Raw(Model.field1.Replace("\"", """))");

Но это дало мне:

A'B"C


person Ray Cheng    schedule 05.08.2013    source источник


Ответы (1)


Я понял. Мне пришлось избегать двойных или одинарных кавычек.

избежать одинарных кавычек:

vm.field1('@Html.Raw(Model.field1.Replace("'", "\\\'"))');

или избежать двойных кавычек:

vm.field1("@Html.Raw(Model.field1.Replace("\"", "\\\""))")

Обновить

Я обнаружил, что в моем исходном решении есть проблема с безопасностью. Если введено значение A'B'C</SCRIPT>, это сломает javascript на странице. Чтобы решить эту проблему, я кодирую в HTML все, кроме одинарных и двойных кавычек.

vm.field1('Html.Raw(Html.Encode(Model.field1).Replace("&#39", "\\\'").Replace("&quot;", "\""))');

Обновление 2

Я обнаружил, что в библиотеке AntiXss есть несколько инструментов для этого, и я обнаружил, что это будет еще лучше.

public static class StringExtensions
{
    public static string ToQuotedJsString(this string s)
    {
        return Micorosoft.Security.Application.Encoder.JavaScriptEncode(s, true);
    }
}

затем в представлении:

vm.field1(@Html.Raw(Model.field1.ToQuotedJsString()));
person Ray Cheng    schedule 05.08.2013
comment
В первом обновлении измените на - person PanKak; 28.06.2017