仓酷云

标题: ASP网页编程之ASP.NET顶用户输出文本的HTML解析举措 [打印本页]

作者: 兰色精灵    时间: 2015-2-3 23:42
标题: ASP网页编程之ASP.NET顶用户输出文本的HTML解析举措
国内有些大的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服务器,所以性能稳定性也一般
作者: 乐观    时间: 2015-2-4 06:05
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者: 因胸联盟    时间: 2015-2-9 17:00
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
作者: 谁可相欹    时间: 2015-2-25 01:40
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
作者: 愤怒的大鸟    时间: 2015-2-28 14:10
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
作者: 莫相离    时间: 2015-3-2 08:44
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
作者: 蒙在股里    时间: 2015-3-4 08:12
那么,ASP.Net有哪些改进呢?
作者: 飘灵儿    时间: 2015-3-11 01:24
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
作者: 老尸    时间: 2015-3-17 17:53
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
作者: 透明    时间: 2015-3-24 15:43
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者: 仓酷云    时间: 2015-4-1 17:09
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
作者: 活着的死人    时间: 2015-4-2 10:04
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者: 分手快乐    时间: 2015-4-3 04:18
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
作者: 灵魂腐蚀    时间: 2015-4-3 15:26
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
作者: 深爱那片海    时间: 2015-4-26 02:11
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者: 若相依    时间: 2015-4-27 07:54
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者: 柔情似水    时间: 2015-6-8 23:34
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
作者: 海妖    时间: 2015-6-14 17:33
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
作者: 爱飞    时间: 2015-6-25 21:28
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
作者: 若天明    时间: 2015-6-27 21:04
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2