网页的编码问题是每个web开发人员都无法避免的问题。纷繁复杂的编码类型总是让页面出现众多让人无语的乱码问题。幸运的是每种编程语言都竭尽全力的去简化编码的解决方法,PHP在这方面也是提供了很多的优化方案,这里就对自己在用原生PHP进行网站开发的时候解决编码问题的方法进行下总结。
其实网站就像是一个信息传输的桥梁,将数据库的数据传输到客户端,在将客户端的数据储存到数据库。所以解决编码问题也应该中这个角度去考虑。即:信源、信道、信宿三个方面。
信源:也就是数据库,这就要求你的数据库、表都必须是用一种支持中文的编码(一般是utf8,这里就用这种编码举例)。这一点很重要,很多开发者在使用PHP时使用的是集成的开发环境,那么MySQL数据库在安装时的默认编码一般会是gbk。所以在新建数据库和新建表的时候都应该注意将编码设置成utf8,以避免和后面的开发产生不必要的冲突。
信道:这里就涉及到程序的问题了。首先一点,请确保你写代码的文件保存的编码格式是utf8。很多的编辑器的默认编码格式都是gbk,所以很多代码看上去是没有编码问题的,但是一旦访问,页面便会出现编码问题
其次便是我们连接数据库的工具了。对于php来说,有两种方式 mysql函数 和mysqli函数。这两种函数库都可以在初始化连接的时候都有charset的选项。但这里设置的其实是连接数据库的编码格式,并不是mysql函数 和 mysqli 获取数据的编码。所以在进行查询前,可以先
query(‘set charset utf8’);
这条sql语句保证了mysql函数和mysqli函数的编码格式,即保证了信道和编码格式。
信宿:这就是HTML前端页面的问题了,保证前端页面的保存格式和解析格式都是utf8就行了。
小结:web开发的过程中经常会碰到的情况是:为什么代码在本机上没有问题,上传到服务器就出现了乱码的问题。这种问题通常就是因为没有考虑到全部的编码情况产生的。本 机上的开发环境会有默认的编码格式,但是服务器上的默认编码可能不同,这也就造成了服务器上的乱码问题。比如有时候mysqli的默认编码格式就是utf8,但在Linus服务器上却不是,这就会产生数据库和页面编码设置都是正确但是出现乱码的问题。
总而言之,一旦出现编码的问题,一定会是代码的问题,千万不要简单的归结为服务器的问题而不去解决。从上面的三个方面去思考解决方案,一定会有解决的方法的。