61阅读

html页面编码utf8-编程技巧 用Asp.net动态生成html页面

发布时间:2017-12-13 所属栏目:教程

一 : 编程技巧 用Asp.net动态生成html页面


此功能适用于后台数据库功能不强的web站点,即大部分文本不是存放在数据库的记录中,而是放在html文件或者xml文件中,仅仅把索引放到数据库中,如文章标题、类别、查询关键字等。这样适合于后台没有诸如MS
Sql Server这样的数据库支持的Web站点。
适用于新闻发布系统,比如sina、163等都是采用动态生成html页面的。
适用于需动态定制页面的程序。比如论坛、聊天室等。可以加载定制好的html页面,来加强美观。
思路
1. 利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据。
2. 使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件。
优点
1. 可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页面头,广告等内容。
2. 静态html文件利用MS Windows2000的Index Server可以建立全文搜索引擎,利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文件的内容。如果包括了数据库搜索与Index索引双重查找,那么此搜索功能将非常强大。
3. 节省服务器的负荷,请求一个静态的html文件比一个aspx文件服务器资源节省许多。
缺点
思路二: 如果用硬编码的方式,工作量非常大,需要非常多的html代码。调试困难。而且使用硬编码生成的html样式无法修改,如果网站更换样式,那么必须得重新编码,给后期带来巨大的工作量。
因此这里采用的是第一种思路
示列代码

1.定义(template.htm)html模板页面
 <html>
 <head>
 <title></title>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 </head>
 <body >
 <table $htmlformat[0] height="100%" border="0" width="100%"
cellpadding="10" cellspacing="0" bgcolor="#eeeeee"
style="border:1px solid #000000">
 <tr>
 <td width="100%" valign="middle" align="left">
 <span style="color: $htmlformat[1];font-size: $htmlformat[2]">$htmlformat[3]</span>
 </td>
 </tr>
 </table>
 </body>
</html>
2.asp.net代码:
 //---------------------读html模板页面到stringbuilder对象里----
 string[] format=new string[4];//定义和htmlyem标记数目一致的数组
 StringBuilder htmltext=new StringBuilder();
 try
 {
 using (StreamReader sr = new StreamReader("存放模板页面的路径和页面名"))
 {
 String line;
 while ((line = sr.ReadLine()) != null)
 {
 htmltext.Append(line);
 }
 sr.Close();
 }
 }
 catch
 {
 Response.Write("<Script>alert('读取文件错误')</Script>");
 }
//---------------------给标记数组赋值------------
 format[0]="background=""bg.jpg""";//背景图片
format[1]="#990099";//字体颜色
format[2]="150px";//字体大小
format[3]= "<marquee>生成的模板html页面</marquee>";//文字说明
//----------替换htm里的标记为你想加的内容
for(int i=0;i<4;i++)
 {
 htmltext.Replace("$htmlformat["+i+"]",format[i]);
}
//----------生成htm文件------------------――
try
 {
 using(StreamWriter sw=new StreamWriter("存放路径和页面名",false,System.Text.Encoding.GetEncoding("GB2312")))
 {
 sw.WriteLine(htmltext);
 sw.Flush();
 sw.Close();
 }
 }
 catch
 {
 Response.Write ("The file could not be wirte:");
 }

小结
用此方法可以方便的生成html文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快。

二 : HTML与javascript中常用编码浅析

在日常的前端开发工作中,我们会经常的与HTML、javascript、css等语言打交道,和一门真正的语言一样,计算机语言也有它的字母表、语法、词法、编码方式等,在这里我简单的谈一下前端HTML与javascript日常工作中常碰到的编码问题。

在计算机中,我们储存的信息都是用二进制码表示的。我们认识的、屏幕上显示的英文、汉字等符号和储存用的二进制代码的互相转换,就是编码。

有两个基本概念需要说明,charset 和 character encoding:

charset ,字符集,也就是某个符号和某个数字映射关系的一个表,也就是它决定了107 是koubei 的 ‘a’,21475 是口碑的“口”,不同的表有不同的映射关系,如 ascii,gb2312,Unicode. 通过这个数字和字符的映射表,我们可以把一个二进制表示的数字转换成某个字符。

chracter encoding ,编码方式。例如,同是对于应“口”的 21475 这个数,我们是用 u5k3e3 表示呢,还是用 %E5%8F%A3 来表示呢?这就是由 character encoding 来决定的。

对于 ‘koubei.com’ 这样的 字符串来说,是美国人的常用字符,他们就制定了一个 叫做ASCII 的字符集,全称是 american standard code of information interchange 美国标准信息交换码,用0–127这128个数字,(2的7次方,0×00-0×7f) 代表了123abc这样的常用的128个字符。一共是 7 bits,再加上第一个是符号位,要用来去补码反码表示负数什么的,一共8 bits 构成一个 byte。当年美国人就是小气了点,要是一开始就设计成一个 byte 是16 bits、32 bits,世界上会少很多问题,不过当时,估计他们觉得 8 bits 就够了,可以表示128个不同的字符呢!

介于计算机这玩意儿是美国人搞出来的,所以他们自己省事,把自家用的符号都编码好了,用的挺爽的。但当计算机开始国际化的时候,问题出来了,拿中国举例吧,汉字就好几万,怎么办?

现有的 8 bits 一个 byte 的系统是基础,不能破坏,不能去改到 16 bits之类的,否则改动太大了,只能走另一条路:用多个 ascii 的字符去表示一个其他字符,也就是 MBCS ( Multi-Byte Character System,多字节字符系统)。

有了这个 MBCS 的概念,我们可以表示更多个字符了,比如我们用 2 个 ascii 字符,就有 16 bits, 理论上有 2 的 16 次方 65536 个字符。但这些编码怎么分配到字符上呢?比如口碑的”口”的 Unicode 编码就是 21475,谁决定的呢?字符集,也就是刚刚介绍的charset。ascii就是最基础的一个字符集,在此之上,我们有类似于 gb2312, big5这样针对简体中文和繁体中文的MBCS的字符集等等。终于有个叫 Unicode Consortium 的机构,决定做一个囊括所有字符在内的字符集(UCS, Universal Character Set)和对应编码方式的标准,即 Unicode。从1991年开始,它发布了第一版 Unicode 国际标准,ISBN 0-321-18578-1 ,国际标准化组织 ISO 也参与了这个的定制,ISO/IEC 10646 : the Universal Character Set。总之,Unicode 是个基本覆盖了所有已经存在的地球上的符号的字符标准了,现在正在被越来越广泛的使用,ECMA 标准也规定,javascript语言的内部字符使用 Unicode 标准(这意味着,javascript的变量名、函数名等是允许中文的!)。

对于身在中国的开发者来说,可能碰到比较多的问题就是 gbk, gb2312, utf-8 之间转换之类的问题了。严格的说这个说法不是很准确,gbk,gb2312是字符集 (charset),而 utf-8 是一种编码方式 (character encoding) ,是 Unicode 标准中 UCS 字符集的一种编码方式,因为使用 Unicode 字符集的网页主要用UTF-8编码,所以大家常常就把它们并列了,其实是不准确的。

有了 Unicode 后,至少人类文明没有碰到外星人之前,这是一把万能钥匙了,都用它吧。而现在使用最广泛 Unicode 的编码方式就是 UTF-8 (8-bit UCS/Unicode Transformation Format) 了,它有几个特别好的地方:

编码 UCS 字符集,全世界通用

是一种变长编码方式(variable-length character encoding),兼容 ascii

第二点是个很大的优点,它使得以前使用纯 ascii 编码的系统兼容,而且不会增加额外的存储量(假设定长的编码方式,规定每个字符由2个 bytes 组成,那么这时候 ascii 字符占用的存储空间将增大一倍)。

三 : 用符合标准的html代码编写专题的页头

以前拿到这种页头的时候,会在html里面插入图片,然后把有链接的地方用热区分割加链接,这样的写法不利于seo;

可以看到四个导航按钮的位置比较个性化,我用的方法是这张图作为背景,其他带链接的都绝对定位,在html代码里只看到精简的代码:

html代码:

以下为引用的内容:

<div id=”WishDream” class=”WishTop”>
<h1>爱有天意 under the love heaven</h1><!–主标题–>
<h2>在这里,写下你的个人梦想</h2><!–副标题–>
<ul>
<li class=”Index”><a href=”#” title=”许愿首页”>许愿首页</a></li>
<li class=”Love”><a href=”#” title=”爱情表白”>爱情表白</a></li>
<li class=”Dream”><a href=”#” title=”个人梦想”>个人梦想</a></li>
<li class=”Birth”><a href=”#” title=”生日祝福”>生日祝福</a></li>
</ul>
<div id=”SearchWish”>
<form>
<h3>搜搜看-找相同的愿望:</h3>
<input name=”" type=”text” />
<button><img src=”images/fenlei/button_go.gif” align=”absmiddle” /></button>
</form>
</div>
<a href=”#” target=”_blank” class=”WriteWish” title=”写纸条”>写纸条</a>
</div>

css部分:

以下为引用的内容:
.WishTop{
position:relative;
margin-top:-18px;
>margin-top:0;
height:220px;
}
#WishDream{background:url(../images/fenlei/top_dream.jpg) no-repeat;}/*把公用的WishTop和私有的WishDream分开,有助于扩展,下次需要新的许愿主题时,只要改私有的id就可以了*/
.WishTop h1,.WishTop h2{ text-indent:-100000px;}
.WishTop li a{
position:absolute;
display:block;
text-indent:-100000px;/*html代码里的文字都用这个方法让它们不显示出来*/
background:url(../images/fenlei/top_bgno.jpg);
}
.WishTop li.Index a{
top:25px;
left:15px;
width:70px;
height:35px;
}
.WishTop li.Love a{
top:50px;
left:135px;
width:99px;
height:46px;
}
.WishTop li.Dream a{
top:97px;
left:22px;
width:100px;
height:48px;
}
.WishTop li.Birth a{
top:150px;
left:163px;
width:100px;
height:48px;
}

/*搜索框css同理,略*/

这个写法不一定最好,有啥好建议都踩一下哦:)

本文标题:html页面编码utf8-编程技巧 用Asp.net动态生成html页面
本文地址: http://www.61k.com/1160671.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1