跨语言字符串转义

Cross-language string escaping

我在 C# 中有一个包含错误消息的字符串。此消息可能包含单引号或双引号或两者兼而有之,但我可以根据需要随意操作字符串(以及 HTML/Javascript)。

例如,可以显示以下消息(内容不重要,重要的是它们可以包含单引号或双引号):

此字符串作为 onClick 处理程序内部的警报插入到 HTML 中。这听起来很复杂,所以让我说明一下我的意思:

<a onClick="alert('myContentGoesHere')">View Error</a>

我可以通过在 C# 中将 ' 替换为 \' 来显示单引号。但是,我尝试类似地转义 " 导致出现奇数个反斜杠,这会终止 onClick 属性并导致 HTML.

无效

到目前为止,我已尝试将 " 替换为:

没有骰子。我觉得我可能从错误的角度来处理这个问题,所以如果你有一个超越字符串替换的解决方案,我会洗耳恭听。感谢您提供的任何帮助。

要使该值在 JavaScript 中用作字符串文字,您需要转义字符串定界符和反斜杠。然后,您需要 HTML 对 JavaScript 进行编码,以便它作为 HTML 属性中的一个值。

示例:

string code =
  "<a onClick=\"" +
  HttpUtility.HtmlEncode(
    "alert('" +
    myContentGoesHere.Replace("'", "\'").Replace("\", "\\") +
    "');"
  ) +
  "\">View Error</a>";

如果字符串可以包含控制字符,您也需要替换它们。添加您需要的:

 .Replace("\r", "\r")
 .Replace("\n", "\n")
 .Replace("\b", "\b")
 .Replace("\t", "\t")
 .Replace("\v", "\v")
 .Replace("\f", "\f")