我的网站PHP文件是utf-8格式的,希望file_get_contents读取的一个网站却是gb2312格式的,因此显示出现乱码。详细情况如下:gb2312格式包含utf-8格式乱码网站有很多PHP文件,解决乱码问题,我是打算只把读取网页的这个PHP文件改为gb2312格式,其他的保留utf-8格式。但是因为这个文件又包含有其他的PHP文件,而包含的文件又包含了另外的几个文件……另外一个解决思路是:把file_get_contents得到的内容用iconv转化为utf-8格式,但是css文件却还是没有改变,同时,可能是部分网页包含特殊符号,编码转化造成丢失,部分网页只得到一段。请教各位解决思路……

解决方案 »

  1.   

    utf-8 编码的覆盖范围 > GBK 编码的覆盖范围(前者还包含单字节扩展ASCII)
    GBK 编码的覆盖范围 > GB2312 编码的覆盖范围(后者是前者的子集)
    所以无论是将 gb2312 还是 gbk 转向 utf-8 都不会出现丢失程序要做到的是:根据源数据的编码自动转换关键字的编码比较简单的做法是读取和分析程序分开
    读取的内容直接入库,利用数据库统一编码
    分析就可按单一编码进行了
      

  2.   

    将获取的编码都转为utf-8不就对了嘛,对你说的css的转换没效果,感到不明白!
      

  3.   

    在转编码是有些iconv()函数不能转换的字符,你可以用mb_convert_encoding()函数去转换
      

  4.   

    css 文件除了注释如果有中文会出现问题之外编码不编码有关系嘛?
      

  5.   

    用你第二种解决方式会好一些,一般用iconv转换后,网页内容是正常的,不会出现乱码的情况iconv("GB2312","UTF-8//TRANSLIT ",$data) ;
    iconv("GB2312","UTF-8//IGNORE",$data) ;第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
    或者用GBK来代替gb2312试下,
    iconv("GBK","UTF-8",$data);
      

  6.   

    各位朋友真是太热情,问题已经得到解决,多谢多谢。主要是遇到一些不能转换的字符,造成了数据丢失。“libo_sina”、“freedom_gooboy”两位朋友的方法都可以解决。