如何将带双引号的C#转义字符串转换为带双引号的转义JavaScript字符串

3

我在使用具有转义符号的字符串时,在 JavaScript 中使用它们时遇到了一个问题。

在视图顶部,我这样初始化变量:

@{ var lol = "hello \"mister sir\" I am quotes"; }

在JavaScript中,我尝试了不同的变体。为了测试目的,我编写了一个小函数:
    $selector = $('#some-button');
    function test(str) {
        $selector.html(str);
        alert(str);
    }

这里是我的尝试:

  1. javascript escaping. It works fine either in alert, or in html content.

    test("hello \"mister sir\" I am quotes");
    
  2. HtmlAttributeEncode or HtmlEncode. They do not work in all cases. It displays hello "mister sir" i am quotes in alert and hello "mister sir" i am quotes in html content

    test("@HttpUtility.HtmlAttributeEncode(lol)");
    test("@HttpUtility.HtmlEncode(lol)");
    
  3. default c# or JavaScriptStringEncode. They do not work in alerts. It displays hello "mister sir" i am quotes in alerts.

    test("@Ajax.JavaScriptStringEncode(lol)");
    test("@lol");
    test("@HttpUtility.JavaScriptStringEncode(lol)");
    
  4. Html.Raw(). Not works at all. It breaks mark-up with unescaped double quotes.

    test("@Html.Raw(lol)");
    

你能帮我提供一些类似于javascript变体(1)的方法吗?


2
JavaScript 对 HTML 一无所知,尽管通常它嵌入其中。你必须生成有效的 JavaScript 字符串表示形式,最简单的方法是将其编码为 json - Marc B
对于您的_String字面值_,您正在转义双引号,但是在_String_ lol中没有反斜杠,因此lol中的字符都没有被转义。带有转义字符的字面量将如下所示:"hello \\\"mister sir\\\" I am quotes"" - Paul S.
1个回答

2

通常最好使用您喜欢的JSON序列化程序对任何要注入javascript的值进行编码。这将自动在字符串周围添加双引号,并适当地转义字符串中的任何内容:

test(@Html.Raw(JsonConvert.Serialize(lol)));

没错,它能用。这个解决方案并不美观,但至少它能用。谢谢。 - Mickey P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接