php源文件编码方式问题(求个原理级别回复)
这个问题一直迷糊,查了很多资料,但是没有原理级别的回复。我就问个为什么?具体问题比如:记事本创建php文件,编码是ansi,编写代码时没有header()方法,测试php...
这个问题一直迷糊,查了很多资料,但是没有原理级别的回复。我就问个为什么?
具体问题比如:记事本创建php文件,编码是ansi,编写代码时没有header()方法,测试php网页时一切正常。
但是当我把这个源文件保存为utf-8时,再测试就是乱码了,当我保存是再勾选bom时没问题了,或者加上header方法设置成utf8时也没事了。
主要是我想使用utf-8的源文件,因为我想所有源文件都统一使用utf-8的,而且html文件的meta标签也设置为utf8的。
我学的html、php、mysql、所以想统一使用tuf-8(不管是源文件还是网页字符集),而且也为了向后兼容。
不想使用header()并且想用无BOM的文件 展开
具体问题比如:记事本创建php文件,编码是ansi,编写代码时没有header()方法,测试php网页时一切正常。
但是当我把这个源文件保存为utf-8时,再测试就是乱码了,当我保存是再勾选bom时没问题了,或者加上header方法设置成utf8时也没事了。
主要是我想使用utf-8的源文件,因为我想所有源文件都统一使用utf-8的,而且html文件的meta标签也设置为utf8的。
我学的html、php、mysql、所以想统一使用tuf-8(不管是源文件还是网页字符集),而且也为了向后兼容。
不想使用header()并且想用无BOM的文件 展开
展开全部
涉及到4个问题:
1.带BOM的UTF-8,该类型文件会在文件开头产生一个字节不可见的编码符号,是用来告诉其他程序这个文件是UTF-8的格式,所以加了就可以解析了
2.为什么使用了header,浏览器是可以通过html标识和header头确定编码格式
3.PHP不能所有页面都用带BOM的,因为PHP脚本是互相加载的,该字节会多次出现在文件中,会对编码解析照成问题,这种的乱码不是因为客户端无法识别,是识别正确,但内容编码错误
4.PHP作为脚本,目前通常都是用html标识来确定页面编码最为合适,毕竟header有使用限制,如前面不能输出数据等
5.对于数据库则不会产生错误,原因在于与数据库的通信是通过接口通信,本身就不是通过BOM来确定编码格式,有数据库的设置确定,所以会要预先执行SET utf8,mysql是utf8不带横杠的(一次说全了)
所以只要选择UTF-8无BOM格式,在输出中使用HTML表示来表示页面编码类型,即可保证编码一致,如果是JS的AJAX通信则不用担心,因为JS只用UTF-8格式解析数据
不知道是不是原理级别,但应该能解答你的疑惑
1.带BOM的UTF-8,该类型文件会在文件开头产生一个字节不可见的编码符号,是用来告诉其他程序这个文件是UTF-8的格式,所以加了就可以解析了
2.为什么使用了header,浏览器是可以通过html标识和header头确定编码格式
3.PHP不能所有页面都用带BOM的,因为PHP脚本是互相加载的,该字节会多次出现在文件中,会对编码解析照成问题,这种的乱码不是因为客户端无法识别,是识别正确,但内容编码错误
4.PHP作为脚本,目前通常都是用html标识来确定页面编码最为合适,毕竟header有使用限制,如前面不能输出数据等
5.对于数据库则不会产生错误,原因在于与数据库的通信是通过接口通信,本身就不是通过BOM来确定编码格式,有数据库的设置确定,所以会要预先执行SET utf8,mysql是utf8不带横杠的(一次说全了)
所以只要选择UTF-8无BOM格式,在输出中使用HTML表示来表示页面编码类型,即可保证编码一致,如果是JS的AJAX通信则不用担心,因为JS只用UTF-8格式解析数据
不知道是不是原理级别,但应该能解答你的疑惑
追问
为什么在不使用mete和header的情况下保存文件为utf-8就不能正常解析呢
追答
第一点就说了
其他程序是通过判断文件开头的字节判断该文件的类型
如图片视频等等,都有对应的字节头
这个可以认为是规范
因为如果你自己开发个浏览器,实际上是可以不通过mete和header的情况下识别出utf-8
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询