跨语言字符串转义
Cross-language string escaping
我在 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"
此字符串作为 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")
我在 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"
此字符串作为 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")