处理从 c# 生成的 html 中的嵌套引号

Posted

技术标签:

【中文标题】处理从 c# 生成的 html 中的嵌套引号【英文标题】:dealing with nested quotes in html generated from c# 【发布时间】:2011-01-14 11:27:57 【问题描述】:

我正在使用第 3 方库来显示工具提示,如下所示:

string tooltip = "test";
output.Write("onmouseover='Tip(\"" + test + "\");'");  // work fine :)

我遇到了以下情况,我需要引号来格式化:

string tooltip = "<span style='color:red;'>test</span>";
output.Write("onmouseover='Tip(\"" + test + "\");'");  // no working :(

如何在工具提示中转义 html 所需的引号,以免中断函数调用?

【问题讨论】:

【参考方案1】:

" 的任何实例替换为&amp;quot;,如下所示:

test.Replace( "\"", "&quot;" )

【讨论】:

这仍然会导致 XSS 攻击。 我认为您错误地假设字符串测试以某种方式来自最终用户,这不是我从上面的示例中看到的。对我来说,很明显他控制了工具提示。【参考方案2】:

这是微软Anti-Xss Library的完美使用

使用它,您可以调用 javascriptEncode 函数,该函数将构建一个如下所示的字符串:

Microsoft.Security.Application.AntiXss.JavaScriptEncode("ab'c\"d")
// 'ab\x27c\x22d'

请注意其中包含引号

您可以接受它,对其进行 HTML 编码,然后将其直接放入括号中。

类似这样的:

string tooltip = "<span style='color:red;'>test</span>";
output.Write("onmouseover=\"Tip(" + AntiXss.JavaScriptEncode(test) + ");\"");  // working :)

【讨论】:

以上是关于处理从 c# 生成的 html 中的嵌套引号的主要内容,如果未能解决你的问题,请参考以下文章

关于js生成的字符串带有单双引号嵌套的问题

使用批处理生成 html .. 转义引号

从 Django 模板中的嵌套列表生成表

用 C# 替换完整 sql 查询中的单引号

访问从 GraphQL 生成的多个嵌套 TypeScript 类型

如何从Visual Studio中的UML类图生成C#源代码