C#代码处理前台html标签拼接

C#代码处理前台html标签拼接
  之前⼀篇⽂章是写,JavaScript处理特殊字符拼接时截断问题。最近在处理公司⽼软件兼容性升级时碰到的⼀个类似的问题,这次是后台拼接字符串,前台.aspx页⾯显⽰的。中间⾛了两次弯路,在此记录⼀下。
文字拼接
先看个正确的效果图。
打孔文件夹图(1)这个图看起来是不是有点眼熟
业务处理场景简单化⼀下。在⽇期控件⾥显⽰拼接的html标签。下⾯代码是未处理这个bug时源代码。
1      StringBuilder strBld = new StringBuilder();
2            CalendarDay day = e.Day;
3            TableCell tc = e.Cell;
4
5if (day.IsOtherMonth)
6            {
7
8                tc.Controls.Clear();
9return;
10            }
11            e.Cell.Attributes.Remove("align");采空区处理方法
12            e.Cell.Attributes.Add("align", "left");
13            e.Cell.CssClass = "date";
14
15            strBld.AppendFormat("<dl><dt>");
16            strBld.Append(day.Date.Day.ToString() + "⽇");
17            strBld.Append("</dt>");
18            DataRow[] drs = dsNote.Tables[0].Select(" createDate>'" + day.Date.ToString() + "' and createDate<'" + day.Date.AddDays(1).ToString() + "'");
19if (drs.Length > 0)
20            {
21                strBld.Append("<dd><ul>");
日志存储
22int num = 0;
23//获得数据
24foreach (DataRow dr in drs)
25                {
26if (num < 3)
27                    {
28                        strBld.AppendFormat("<li><img src='../images/main/manage_ico.gif' /><a οnclick='opendlg({1})' nid='{1}' title='{2}'>{0}</a></li>",
29                                      Globals.GetSummary(dr["title"].ToString(), 5),
30                                          dr["noteID"].ToString(), dr["title"].ToString());
31                    }
32else
33                    {
34                        strBld.AppendFormat("<li><a οnclick='opendlg2(\"{0}\")'>更多....</a></li>", e.Day.Date.ToShortDateString());
35break;
36                    }
37                    num++;
38                }
39                strBld.Append("</ul></dd>");
40            }
41            strBld.Append("</dl>");
42            tc.Text = strBld.ToString();
  拼接的字符串,“<a οnclick='opendlg({1})' nid='{1}' title='{2}'>” 这种形式会在输⼊特殊字符“'”单引号时截断,导致后⾯的内容显⽰错误。见下图。
图(2)
  第⼀次解决思路(当时很天真:D):既然onclick⾥的opendlg()有⽤,那我直接在title⾥⽤上escapeHtml这个⽅法就是了。结果并没什么⽤。页⾯直接显⽰出来这个⽅法o(╯□╰)o。
丁酮肟图(3)
  第⼆种思路是⽤Server.HtmlEncode()。代码30⾏dr["title"].ToString()这个参数⽤Server.HtmlEncode()包起来,满⼼期待的能奏效,结果还是不⾏,且希望越⼤,失望越⼤,⽇历表格整个都显⽰不全了。
图(4)
  最后还是html实体编码的思路,只不过这次是换后台执⾏。⽤两个⽅法处理了下特殊字符。⽤HtmlEncode(string s)⽅法替代了Server.HtmlEncode(),解决问题。下⾯贴上代码:
public string HtmlEncode(string s)
{
if (s == null)
{
return null;
}
StringBuilder sb = new StringBuilder();
StringWriter output = new StringWriter(sb);
HtmlEncode(s, output);
return sb.ToString();
}
public void HtmlEncode(string s, TextWriter output)        {
if (s != null)
{
int length = s.Length;
for (int i = 0; i < length; i++)
{
char ch = s[i];
char ch2 = ch;
if (ch2 != '"')
{
switch (ch2)
{
case'<':
output.Write("<");
continue;
case'>':
output.Write(">");
continue;
case'\'':
output.Write("'");
continue;
case'&':
output.Write("&");
continue;
镭射贴default:
output.Write(ch);
continue;
}
}
else
{
output.Write(""");
continue;
}
}
}
}
View Code
在前台要再调⽤下解码⽅法,参考代码:
//html解码
function htmlDecodeByRegExp(str) {
var s = "";
if(str.length == 0) return "";
s = place(/&/g,"&");
s = s.replace(/</g,"<");
s = s.replace(/>/g,">");
s = s.replace(/ /g," ");
s = s.replace(/'/g,"\'");
s = s.replace(/"/g,"\"");
return s;
}
View Code
题外话:之前经常看博客园或者其他⼈写的帖⼦、⽂章,好多⼈分享的⽂章写的很好,技术上认知是⼀⽅⾯,排版什么的也很好。事情放到⾃⼰时才觉得,写⼀篇好的⽂字真是不容易,要很⽤⼼,有⼼再编辑、润⾊⼀下⾃⼰的博客,发现还是不够满意,以后再慢慢积累吧,⽂章中可能有的地⽅说的不
是很清楚,欢迎⼤家批评指正。

本文发布于:2024-09-22 11:25:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/344599.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:处理   拼接   特殊字符   思路   前台   截断   代码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议