# 记事本引发的一起灾难,猫猫不得已搬出了照妖镜,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
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
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
2
3
4
5
6
7
8
9
10
也可以自己用代码另存一下还原HTML,或者用十六进制编辑工具删掉前面三个字符。
其实搞技术的,现在解决不了,是因为自己的了解的知识的广度,像今天的问题,如果我们不知道不可见字符,可以用十六进制查看器查看,就能及时找到妖怪。
就好像VFP也可以发送TSQL从MSSQL取出数据,直接将日期时间型转换成日期型一样。试了无数方法,唯独漏了一种方法。