解决了一个utf8编码的问题,自己高兴一下。
从某个时候开始(应该是给servlet折磨之后),本人的php程序编码就只有utf-8的编码格式了,所以从不去考虑gb2312以及GBK,但是最近写一个程序的时候却遇到了很大的麻烦。该程序是一个数据导入程序,导入到文件格式很多,需要php自动分析,这个似乎难不倒我,但是问题在于这些文件的编码方式不一样,有的是gb2312,有的是utf-8,麻烦可大了。当然,或许有朋友要吧iconv或者mb_convert_encoding函数介绍给我,这些函数都一一尝试过,它们有一个严重的问题就是转换之后丢失文字。
最初的时候我以为导入文件都是GB2312的编码,所以我做了两次处理。首先将上传文件的表单提交给一个GB2312编码的php(do-gb2312.php)程序,这样从文件中读取的内容可以正常显示,然后通过ajax将php读出的结果返回到utf-8编码的一个表单中,再次用javascript提交该表单,问题解决了。然而问题并没有解决,因为用户还有另外的导入格式,而这些格式中居然又出现了UTF8的编码模式,刚才的程序好不容易把GB2312编码的文件处理好,但是UTF-8编码又出问题了。
想了很久,最后终于出绝招了。将do-gb2312.php原封不动的以utf-8编码的格式保存成另外一个文件do-utf8.php,在do-gb2312.php中加上编码判断。主界面的表单默认还是提交给do-gb2312.php,当do-gb2312.php中发现文本编码是UTF8格式的时候,通过js自动将主界面的表单提交域改成do-utf8.php,再次提交,大功告成,终于圆满的解决了此问题,毕竟中文除了GB2312和UTF8编码模式之外基本不会有其他的编码模式了。
下面是相关的函数,和一篇墙外相关的文章(虽然他没有解决我的问题,但是还是很有用的,所以我将它搬回到墙内) (read on …)

业余接触php已经有6年多了,中间也遇到过很客户的BT需求,配合刚才发布的文章,所以特此介绍一下我想出来的变态解决方案,说不定你哪天也会用得上呢,用不上就当做看看玩吧。