跨语言字符串转义

4
我在C#中有一个包含错误消息的字符串。该消息可能包含单引号或双引号或两者,但我可以自由地操作字符串(以及HTML/Javascript)。
例如,以下消息可能会显示(内容不重要,只是它们可能包含单引号或双引号):
- “The following error has occurred: "You dun goofed."” - “The specified path isn't valid.” - “The following error has occurred: "I'm a goof"”
这个字符串作为一个警报插入到HTML中,在一个onClick处理程序中。听起来很复杂,所以让我展示一下我的意思:
```html View Error ```
我可以通过在C#中用\'替换'来使单引号显示。然而,我试图类似地转义",但结果是奇数个反斜杠,导致onClick属性终止并导致无效的HTML。
到目前为止,我尝试了以下方式替换"
- \" - \\" - " - \" 都不行。如果您有超出字符串替换的解决方案,我非常愿意倾听。谢谢你能提供的任何帮助。

请发布您要转义的实际字符串。 - Rahul
1个回答

7
为了使JavaScript中的值作为字符串文字起作用,您需要转义字符串定界符和反斜杠。然后,您需要对JavaScript进行HTML编码,以便它作为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")

谢谢您的回复。这是一个很好的答案,但让我意识到我的问题不够充分。在我的项目中,C#和HTML之间有额外的层次,我最初认为这些层次并不涉及:在ASP.NET视图中的Kendo模板。这似乎通过将您漂亮转义的\"变成\\"来“帮助”您。然而,这使我得出了一个有用的答案,所以您的答案对我的问题来说是好的。http://stackoverflow.com/questions/20477063/javascript-how-to-escape-double-and-single-quotes-on-kendo-template - Tonkleton

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