我正在使用StringBuilder添加一些脚本。脚本如下所示。
<script type='text/javascript'><!-- //<![CDATA[
var m3_u = (location.protocol == 'https:' ? 'https://rre.rrt.com/sss.php' : 'https://rre.rrt.com/sss.php');
var m3_r = Math.floor(Math.random() * 99965449);
if (!document.MAX_used) document.MAX_used = ',';
document.write("<scr" + "ipt type='text/javascript' src='" + m3_u);
document.write("?zoneid=311120&target=_top");
document.write('&cb=' + m3_r);
if (document.MAX_used != ',') document.write("&exclude=" + document.MAX_used);
document.write(document.charset ? '&charset=' + document.charset : (document.characterSet ? '&charset=' + document.characterSet : ''));
document.write("&loc=" + escape(window.location));
if (document.referrer) document.write("&referer=" + escape(document.referrer));
if (document.context) document.write("&context=" + escape(document.context));
if (document.mmm_fo) document.write("&mmm_fo=1");
document.write("'><\/scr" + "ipt>");
//]]>-->
</script><noscript><a href='https://rre.rrt.com/sss.php?n=ad4565c1&cb=2244' target='_top'><img src='https://rre.rrt.com/sss.php?zoneid=36540&n=a535c1' border='0' alt='' /></a></noscript>
当我使用String Builder添加它时,它会出现错误“字符文字中的字符过多”这就是我正在做的事情。怎么做?
sb.append(@"<script type='text/javascript'><!-- //<![CDATA[
var m3_u = (location.protocol == 'https:' ? 'https://rre.rrt.com/sss.php' : 'https://rre.rrt.com/sss.php');
var m3_r = Math.floor(Math.random() * 99965449);
if (!document.MAX_used) document.MAX_used = ',';
document.write("<scr" + "ipt type='text/javascript' src='" + m3_u);
document.write("?zoneid=311120&target=_top");
document.write('&cb=' + m3_r);
if (document.MAX_used != ',') document.write("&exclude=" + document.MAX_used);
document.write(document.charset ? '&charset=' + document.charset : (document.characterSet ? '&charset=' + document.characterSet : ''));
document.write("&loc=" + escape(window.location));
if (document.referrer) document.write("&referer=" + escape(document.referrer));
if (document.context) document.write("&context=" + escape(document.context));
if (document.mmm_fo) document.write("&mmm_fo=1");
document.write("'><\/scr" + "ipt>");
//]]>-->
</script><noscript><a href='https://rre.rrt.com/sss.php?n=ad4565c1&cb=2244' target='_top'><img src='https://rre.rrt.com/sss.php?zoneid=36540&n=a535c1' border='0' alt='' /></a></noscript>
");
答案 0 :(得分:7)
使用StringBuilder
的重点是逐个构建字符串。如果将长字符串分解为逻辑部分,那么您就可以更容易地找出任何错误并进行修改(相信我,它会变得更容易阅读!)。
此外,在C#中使用逐字字符串文字时,仍然需要使用另一个双引号来转义双引号。以下代码正确编译:
sb.Append(@"<script type='text/javascript'>");
sb.Append(@"<!-- //<![CDATA[");
sb.Append(@"var m3_u = (location.protocol == 'https:' ? 'https://rre.rrt.com/sss.php' : 'https://rre.rrt.com/sss.php');");
sb.Append(@"var m3_r = Math.floor(Math.random() * 99965449);");
sb.Append(@"if (!document.MAX_used) document.MAX_used = ',';"");");
sb.Append(@"document.write(""<script type='text/javascript' src='"" + m3_u);");
sb.Append(@"document.write(""?zoneid=311120&target=_top"");");
sb.Append(@"document.write('&cb=' + m3_r);");
sb.Append(@"if (document.MAX_used != ',') document.write(""&exclude="" + document.MAX_used);");
sb.Append(@"document.write(document.charset ? '&charset=' + document.charset : ");
sb.Append(@"(document.characterSet ? '&charset=' + document.characterSet : ''));");
sb.Append(@"document.write(""&loc="" + escape(window.location));");
sb.Append(@"if (document.referrer) document.write(""&referer="" + escape(document.referrer));");
sb.Append(@"if (document.context) document.write(""&context="" + escape(document.context));");
sb.Append(@"if (document.mmm_fo) document.write(""&mmm_fo=1"");");
sb.Append(@"document.write(""'><\/script>"");");
sb.Append(@"//]]>-->");
sb.Append(@"</script>");
sb.Append(@"<noscript>");
sb.Append(@"<a href='https://rre.rrt.com/sss.php?n=ad4565c1&cb=2244' target='_top'>");
sb.Append(@"<img src='https://rre.rrt.com/sss.php?zoneid=36540&n=a535c1' border='0' alt='' /></a>");
sb.Append(@"</noscript>");
答案 1 :(得分:3)
当您尝试使用多个字符的char类型初始化时,.NET通常会出错。
在对话here中,当.NET被单引号混淆并假设您正在尝试使用它们来定义“char”文字时,您似乎也会收到错误。
鉴于上面的字符串中大量使用了双引号和单引号,我建议将它分成较小的字符串和.append()分别对每个字符串 - 也许是对字符串的每一行进行单独的.append()调用
然后,您将能够缩小范围并找出.NET反对的位。
然后,您应该可以通过检查双引号和单引号来解决问题。我无法破译你的追加,但看起来你应该在某些地方使用转义双引号。
编辑:转义双引号的示例:
例如
sb.Append("document.write(\"<scr\" + \"ipt type='text/javascript' src='\" + m3_u);");
在Cerebrus建议后编辑:
如果你想使用逐字字符串文字(带有@前缀),那么必须通过重复双引号来转义双引号:
sb.Append(@"document.write(""<scr"" + ""ipt type='text/javascript' src='"" + m3_u);");
答案 2 :(得分:1)
另一个答案:
由于您的javascript代码无论如何都是静态代码(每次都是相同的,没有ASP.NET变量组合到其中),为什么还要在ASP.NET代码中构建它呢?
您可以将整个脚本块放入.aspx页面,就像使用纯HTML页面一样。然后你不需要在代码中构建它。