字符文字中的字符太多

时间:2009-05-09 10:50:59

标签: javascript

我正在使用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&amp;target=_top");
    document.write('&amp;cb=' + m3_r);
    if (document.MAX_used != ',') document.write("&amp;exclude=" + document.MAX_used);
    document.write(document.charset ? '&amp;charset=' + document.charset : (document.characterSet ? '&amp;charset=' + document.characterSet : ''));
    document.write("&amp;loc=" + escape(window.location));
    if (document.referrer) document.write("&amp;referer=" + escape(document.referrer));
    if (document.context) document.write("&context=" + escape(document.context));
    if (document.mmm_fo) document.write("&amp;mmm_fo=1");
    document.write("'><\/scr" + "ipt>");
//]]>-->
</script><noscript><a href='https://rre.rrt.com/sss.php?n=ad4565c1&amp;cb=2244' target='_top'><img src='https://rre.rrt.com/sss.php?zoneid=36540&amp;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&amp;target=_top");
    document.write('&amp;cb=' + m3_r);
    if (document.MAX_used != ',') document.write("&amp;exclude=" + document.MAX_used);
    document.write(document.charset ? '&amp;charset=' + document.charset : (document.characterSet ? '&amp;charset=' + document.characterSet : ''));
    document.write("&amp;loc=" + escape(window.location));
    if (document.referrer) document.write("&amp;referer=" + escape(document.referrer));
    if (document.context) document.write("&context=" + escape(document.context));
    if (document.mmm_fo) document.write("&amp;mmm_fo=1");
    document.write("'><\/scr" + "ipt>");
//]]>-->
</script><noscript><a href='https://rre.rrt.com/sss.php?n=ad4565c1&amp;cb=2244' target='_top'><img src='https://rre.rrt.com/sss.php?zoneid=36540&amp;n=a535c1' border='0' alt='' /></a></noscript>

");

3 个答案:

答案 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&amp;target=_top"");");
sb.Append(@"document.write('&amp;cb=' + m3_r);");
sb.Append(@"if (document.MAX_used != ',') document.write(""&amp;exclude="" + document.MAX_used);");
sb.Append(@"document.write(document.charset ? '&amp;charset=' + document.charset : ");
sb.Append(@"(document.characterSet ? '&amp;charset=' + document.characterSet : ''));");
sb.Append(@"document.write(""&amp;loc="" + escape(window.location));");
sb.Append(@"if (document.referrer) document.write(""&amp;referer="" + escape(document.referrer));");
sb.Append(@"if (document.context) document.write(""&context="" + escape(document.context));");
sb.Append(@"if (document.mmm_fo) document.write(""&amp;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&amp;cb=2244' target='_top'>");
sb.Append(@"<img src='https://rre.rrt.com/sss.php?zoneid=36540&amp;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页面一样。然后你不需要在代码中构建它。