仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1450|回复: 19
打印 上一主题 下一主题

[学习教程] ASP网页编程之ASP.NET顶用户输出文本的HTML解析举措

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:42:03 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了asp.net|asp.net   网页顶用TextBox让用户输出文本,然后存入数据库,再从数据库中读出显示在页面上。经常如许做会碰到很多成绩,由于TextBox实践上是一个Windows组件,和网页显示标志如:<p>,<td>,<div>等,对字符的解析办法是分歧的。好比前者的换行标志为“\r\n”,尔后者为“<br>”。这就带来一个转换的成绩。

在做转换之前,先来思索几个成绩:

1、 TextBox用“\r\n”来标志换行而网页中以“<br>”标志

2、 网页中一连的空格当作一个空格处置,好比“a b c”将会显示“a b c”

3、 用户输出特别字符好比:“<”,“&”,“ ”,“<”,这些都是网页中有特别意义的字符,会被解析,而用户输出的目标固然是不但愿被解析。

如今来处理这几个成绩,有一种处理举措是在显示的时分依然用TextBox去显示,如许就不必做任何转换,只需把TextBox.ReadOnly设为true,如许在必定水平上能知足请求。然而常常为了网页的雅观,如许做是不成取的。对照好的举措是去解析用户输出的字符串,可以做如许的转换:

第一步:

“<” à“<”

“&” à“&”

“ ”à“ ”

……(此处的省略号后文有申明)

第二步:

“ ” à“ ”

“\r\n” à“<br>”

这里必需分两步转换,由于假如你先做第二步转换的话混把用户输出的特别字符串和由转换而的的特别字符串搅浑,好比:

用户输出:a b c d

第二步转换:a b   c d

第一步转换:a b   c d

可以看到,经由第一次转换后已没法分辩用户输出的“ ”和转换而来的“ ”,在做第二次转换的时分就会一致处置就会失足。了局显示:a b   c d

假如严厉依照第一步,第二步的转换按次来转换就不会呈现这个成绩。

把转换后的字符串存入数据库,在显示的时分直接把从数据库读出的字符串给HTML组件赋值,好比:

//这里假定temp是从数据库中读出来的,这里演示Table和HtmlTable其他的控件相似

//显示的后果是:<a b



//Table1是Web控件

String temp = “<a b”;

Table1.Rows[0].Cells[0].Text = temp;

//Table2是HTML控件

Table2.Rows[0].Cells[0].InnerHtml = temp;

HtmlTable有两个类似的属性“InnerHtml”,“InnerText”,引见一下这两个属性的区分:

InnerHtml:显示的时分会对传入的值停止HTML解析,就像下面的例子。

InnerText:显示的时分不会对传入的值新型解析,直接把传入的值显示出来。好比把下面的例子改成:Table2.Rows[0].Cells[0].InnerText = temp;那末显示的后果将会酿成:<a b

固然这两个属性用起来很便利,仿佛可以知足平常的利用需求,然而InnerText有两个成绩:

1、 没法标志换行,不论是“\r\n”仍是“<br>”都不是换行标志

2、 一连的空格依然只显示一个空格。

所以想不转换字符串而直接用InnerText是不成取的。然而转换是个十分繁琐的进程,由于HTML的特别标志十分多。值得光荣的是ASP.NET供应了HttpServerUtil类,该类供应了HtmlEncode()和HtmlDecode()办法,这里咱们只用到HtmlEncode()办法。咱们就能够如许来转换:

//“\r\n”在TextBox中硬回车的时分会主动添上

string temp = “a b c d\r\ne<”;

//Server是Page类的一个属性,也就是说任何aspx页面的codebehind中都是可使用的

//由于aspx页面都是承继Page类的。

temp = Server.HtmlEncode(temp);

temp = temp.WordStr(" "," ");

temp = temp.WordStr("\r\n","<br>");

Table1.Rows[0].Cells[0].Text = temp;

Table2.Rows[0].Cells[0].InnerHtml = temp;

//显示后果:a b c d

// e<

到这里你或许会想一个成绩,万一用户输出“\r\n”怎样办?不必忧虑,网页组件的设计者已思索到了这个成绩,由于用户输出的“\r\n”会被主动转换成“\\r\\n”(固然在咱们做转换之前)。



半途而废:)

</p>  asp可以使用微软的activeX 使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-15 08:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表