C#代码处理前台html标签拼接
之前一篇文章是写,JavaScript处理特殊字符拼接时截断问题。最近在处理公司老软件兼容性升级时碰到的一个类似的问题,这次是后台拼接字符串,前台.aspx页面显示的。中间走了两次弯路,在此记录一下。
先看个正确的效果图。
图(1)这个图看起来是不是有点眼熟
业务处理场景简单化一下。在日期控件里显示拼接的html标签。下面代码是未处理这个bug时源代码。
StringBuilder strBld = new StringBuilder();
CalendarDay day = e.Day;
TableCell tc = e.Cell; if (day.IsOtherMonth)
{ tc.Controls.Clear();
return;
}
e.Cell.Attributes.Remove("align");
e.Cell.Attributes.Add("align", "left");
e.Cell.CssClass = "date"; strBld.AppendFormat("<dl><dt>");
strBld.Append(day.Date.Day.ToString() + "日");
strBld.Append("</dt>");
DataRow[] drs = dsNote.Tables[].Select(" createDate>'" + day.Date.ToString() + "' and createDate<'" + day.Date.AddDays().ToString() + "'");
if (drs.Length > )
{
strBld.Append("<dd><ul>");
int num = ;
//获得数据
foreach (DataRow dr in drs)
{
if (num < )
{
strBld.AppendFormat("<li><img src='../images/main/manage_ico.gif' /><a onclick='opendlg({1})' nid='{1}' title='{2}'>{0}</a></li>",
Globals.GetSummary(dr["title"].ToString(), ),
dr["noteID"].ToString(), dr["title"].ToString());
}
else
{
strBld.AppendFormat("<li><a onclick='opendlg2(\"{0}\")'>更多....</a></li>", e.Day.Date.ToShortDateString());
break;
}
num++;
}
strBld.Append("</ul></dd>");
}
strBld.Append("</dl>");
tc.Text = strBld.ToString();
拼接的字符串,“<a onclick='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 = ; 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;
}
}
}
}
//html解码
function htmlDecodeByRegExp(str) {
var s = "";
if(str.length == 0) return "";
s = str.replace(/&/g,"&");
s = s.replace(/</g,"<");
s = s.replace(/>/g,">");
s = s.replace(/ /g," ");
s = s.replace(/'/g,"\'");
s = s.replace(/"/g,"\"");
return s;
}
C#代码处理前台html标签拼接的更多相关文章
- Asp.Net_后台代码访问前台html标签
//单击按钮后批量改变li元素的内联文本值及样式 ; i <= ; i++) { HtmlGenericControl li = this.FindControl("li" ...
- asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值
后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...
- 后台给前台传JSON字符串,前台解析并拼接显示
后台传JSON public class CourseType : IHttpHandler { Epoint.PeiXun.Bizlogic.BLL.CourseLibrary.PX_CourseT ...
- 为何你的php代码没有写结束标签
PHP闭合标签"?>"在PHP中对PHP的分析器是可选的.但是,如果使用闭合标签,任何由开发者,用户, 或者FTP应用程序插入闭合标签后面的空格都有可能会引起多余的输出.ph ...
- 如何一行jquery代码写出tab标签页(链式操作)
啦啦!今天又学了一招,js写几十行的tab标签页jquery写一行就行啦,用到了链式操作!以下是代码: <!DOCTYPE html> <html lang="en&quo ...
- C#后台找不到前台html标签
没关系! 只要他在form表单里 , 咱在标签加上一个 runat="server"就可以在后台cs代码里找到他了
- Android在代码中获取meta标签内容
最近写SDK需要获取<meta>标签的值,网上资料很多~分享是件好事~我很快就找到了相关资料. 下面贴上代码: ApplicationInfo appInfo = null; String ...
- 如何在 js 代码中使用 jsp 标签或 Java 代码
JSP 标签还是很方便的,比如 Struts.Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算.比如 struts2 的 <s:url value="/a ...
- jeecms栏目模型和内容模型的使用以及对应前台的标签中的属性名
第一步:模型管理-添加模型: 栏目模板前缀设定方案下的channel目录下的ch_menu.html作为浏览栏目的模板页.对应访问网址:项目名/栏目名(一级或者二级栏目如news或者gnxw)/ind ...
随机推荐
- 解决Windows某一应用窗口一直置顶
------------------------------ 解决Chrome 窗口一直置顶问题 Ctrl + Alt + Esc ------------------------------
- Neo4j社区版配置文件
#*****************************************************************# Neo4j configuration## For more d ...
- Oracle DataBase 编码格式
sqlplus 查询 Oracle 数据库结果乱码或显示 ? 则需要设置字符集 一.客户端字符集 格式:NLS_LANG=language_territory.charset Language: 指定 ...
- python css盒子型 浮动
########################总结############### 块级标签能够嵌套某些块级标签和内敛标签 内敛标签不能块级标签,只能嵌套内敛标签 嵌套就是: <div> ...
- MySQL数据类型1
1.float.double.decimal类型用法详解 三者的区别介绍 float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型, ...
- 【英文文档】Solidifier for Windows Installation Guide
Page 1Solidifier for Windows Installation Guide Page 2McAfee, Inc.McAfee® Solidifier for Windows In ...
- [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类
继续接上文: Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用 布局文件同上文一致,这里就不贴了. 一.封装DaoUtils类 User ...
- 传入mybatis的xml为Long型时报There is no getter for property named 'VARCHAR' in
修改前 <insert id="insert" parameterType="com.taotao.pojo.TbContent" > i ...
- 三十五、minishell(3)
35.1 内容 在当前的 minishell 中,如果执行 date clear 命令等,minishell 会停止: 这是因为引入进程组的时候,mshell 放置在前台进程组,同时之后在子进程中又创 ...
- 【Python】Xml To Excel
[Python3] 之前做的入门练习里有一题将excel文件转化为xml文件,这回补上逆向转换→xml to excel 用的还是beautifulsoup. 主要还是:①读取待处理文件文本内容 ②处 ...