# 记事本引发的一起灾难,猫猫不得已搬出了照妖镜,VFP混合HTML还是香

抄代码才是真正的学习,两位同学深有体会: 赵总也深刻感受到听过、与写过是不一样,简单的不简单。

这不,赵总前几天学VFP BS开发的时候,翻车了。

写得好好的HTML页面,用记事本编辑修改一下,就不再输出网页,而是输出网页代码了。然后说这记事本编辑过了,无论你是用什么工具都没有还原,等于“判了死刑”。

猫猫说哪有这么严重,于是我复现了这个过程。

新建一个HTML,保存为index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>加菲猫的VFP</title>
	</head>
	<body>
		VFP的黑科技
	</body>
</html>

1
2
3
4
5
6
7
8
9
10
11

VFP后端代码

*--输出HTML
Define Class ctl_html As session
	Procedure gethtml
		lcTmpl=getWwwrootPath()+"index.html"  &&得到HTML模板的路径
		chtml=FWS_MergeFile(lcTmpl)	&&执行模板		
		_currentcode="UTF-8"  &&模板文件本身是UTF-8格式
		Return cHtml
	Endproc
Enddefine
1
2
3
4
5
6
7
8
9

输入网址查看页面,一切正常。

然后用记事本打开,另存为index.html

再输入网址测试 果真出现了赵总所说的现象。

认真看了一眼,左上角的第一个字符变成了 锘?,乱码,一定有蹊跷。

请出猪八戒的照妖镜,十六进制文本查看器。 出错的页面,真身:

正常的页面,真身:

原来记事本在另存为UTF8格式的时候,会在文件头偷偷加上EF BB BF。 妖怪捉到了,针对妖怪祭上法宝。

去掉前面三个字符,然后输出就OK啦,当然也可以判断一下文件头EF BB BF,有就去掉,没有就照样输出。

*--输出HTML
Define Class ctl_html As session
	Procedure gethtml
		lcTmpl=getWwwrootPath()+"index.html"  &&得到HTML模板的路径
		chtml=FWS_MergeFile(lcTmpl)	&&执行模板
		chtml=substr(cHtml,4) &&RIGHT(cHtml,LEN(cHtml)-3)		
		_currentcode="UTF-8"  &&模板文件本身是UTF-8格式
		Return cHtml
	Endproc
Enddefine
1
2
3
4
5
6
7
8
9
10

也可以自己用代码另存一下还原HTML,或者用十六进制编辑工具删掉前面三个字符。

其实搞技术的,现在解决不了,是因为自己的了解的知识的广度,像今天的问题,如果我们不知道不可见字符,可以用十六进制查看器查看,就能及时找到妖怪。

就好像VFP也可以发送TSQL从MSSQL取出数据,直接将日期时间型转换成日期型一样。试了无数方法,唯独漏了一种方法。