libiconv 支持的编码



php 中的 iconv() 函数常用来作编码转换用。作一些不同编码的动态数据的转换时常遇到一些未知编码的数据,这时 iconv() 支持那些编码转换就很重要。



刚开始,是分析 header  或者是网页的 charset ,从而提取编码方法,但是这种方法是有缺陷的,一些网页中是没有 charset 的,而是由浏览器自动分析而来,有时候判断不准,那就是乱码



使用iconv函数将含有繁体的 GB2312 到 UTF-8 转换时导致内容不完整,就是无法转换的时候就从此处断开,同时报 Notice  ,解决这个问题需要使用它的两个可选的辅助参数:TRANSLIT和IGNORE ,其中//IGNORE 是遇到无法转换的就跳过,继续下文; //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符。

然后这两个参数并不是万能的,繁体和简体的混合字符在转的时候仍然无法显示繁体,这是由于 GB2312 编码的字符集没有含繁体字造成的,如果有一种编码包括了繁体和简体字符集,那么在转换的时候就没有错误,这就用到了 GBK 或者是 GB18030,三者的关系是 GB18030 > GBK > GB2312,也就是说在用iconv函数将含有繁简体的 GB2312 到 UTF-8 转换时标记为 GBk 的 GBK 到 UTF-8 转换效果更好一点。



对iconv函数而言,就是按上面的方法有时候问题仍不能解决,这是由于iconv函数本身的缺陷造成的,PHP还有一个扩展:MBSTRING ,也是用来编码转化的,在编码转换上效果似乎更优,而且能自动判断数据编码,但是用 MBSTRING 自动判断含有繁体的 GB2312 字符集时,它不会认为这是GBK集而是ASCII,而ASCII仅仅可能就是美式键盘的字符集合而已,怎么能和 GBK 相提并论呢,当用 MBSTRING 判断出错,自然用MBSTRING 转换就出问题



所以,不管是用 iconv 或者是 MBSTRING,首先取得网页中数据编码,这里用到了 iconv 、MBSTRING 支持的编码集,知道这个之后就能判断未知数据的编码,从而准确的进行编码转换,再也不怕乱码了。



libiconv 官方网站上的编码支持明细 http://www.gnu.org/software/libiconv/



下面的这个函数能取得数据的编码方式



<?php

header("Content-type: text/html; charset=UTF-8");

$str = file_get_contents('gbk.html');

$coding = chkcode($str); //判断文件gbk.html的编码

$str = iconv($coding,"UTF-8//IGNORE//TRANSLIT",$str); //转为UTF-8编码

echo $str;



function chkcode($str){

    $code = array(

        'GBK',

        'EUC-CN',

        'BIG5',

        'EUC-TW',

        'HZ',

        'CP950',

        'BIG5-HKSCS',

        'UTF-8',

        'ASCII',

        'ISO-8859-1',

        'ISO-8859-6',

        'ISO-8859-8',

        'GB2312',

        'CP936',

        'BIG5-HKSCS:2001',

        'BIG5-HKSCS:1999',

        'ISO-2022-CN',

        'ISO-2022-CN-EXT',

        'SJIS',

        'JIS',

        'EUC-JP',

        'SHIFT_JIS',

        'eucJP-win',

        'SJIS-win',

        'ISO-2022-JP',

        'CP932',

        'ISO-2022-JP',

        'ISO-2022-JP-2',

        'ISO-2022-JP-1',

        'EUC-KR',

        'CP949',

        'ISO-2022-KR',

        'JOHAB',

        'UTF-7'

);



foreach($code as $charset){

if($str==iconv('UTF-8',"$charset//IGNORE//TRANSLIT",iconv($charset,'UTF-8// IGNORE//TRANSLIT',$str))){

        return $charset;

        break;

        }

    }

return 'UTF-8';

}

?>

libiconv 支持的编码的更多相关文章

  1. CodePage------Encoding 类支持的编码以及与这些编码关联的代码页(CodePage)

    Encoding 类 .NET Framework 4  表示字符编码. 继承层次结构 System.Object  System.Text.Encoding    System.Text.ASCII ...

  2. 让ffmpeg支持10bit编码

    文章版权由作者柯O德尔和博客园共有,请尊重并支持原创,若转载请于明显处标明出处:http://www.cnblogs.com/koder/ 最近因为工作需要,要进行265 10bit编码,于是从ffm ...

  3. ubuntu中eclipse 不支持gbk编码问题解决办法

    今天在ubuntu 下, 把Windows下工程导入Linux下Eclipse中,由于工程代码,是GBK编码,而Ubuntu默认不支持GBK编码,所以,要让Ubuntu支持GBK. 方法如下: 1.修 ...

  4. 让ubuntu下的eclipse支持GBK编码

    把Windows下工程导入Linux下Eclipse中,由于以前的工程代码,都是GBK编码,而Ubuntu默认不支持GBK编码,所以,我们要让Ubuntu支持GBK,方法如下: 1.修改/var/li ...

  5. 获取jdk支持的编码类型

    //获取jdk支持的编码类型 Map<String,Charset> maps = Charset.availableCharsets(); for(Map.Entry<String ...

  6. php开启mbstring扩展并设置支持utf-8编码

    前一段时间使用一个服务的接口,因为调用接口时使用的参数里面有中文,调用接口会出现异常问题,后来才明白是编码不一致的问题.然而,我本地项目开发使用的是utf-8,接口那边也是需要utf-8的,那么问题来 ...

  7. freeswitch 音 视频 支持的编码

    FreeSWITCH 支持很多的语音编解码:[13] PCMU – G.711 µ-law PCMA – G.711 A-law G.722 G.722.1 G.722.1c G.726 G.726  ...

  8. 如何使 vlc 支持 fdk-aac 编码(windows平台

    可能是由于fdk-aac开源协议的原因,VLC默认是不支持fdk-aac编码的,fdk-aac 是非常优秀的AAC编码库,并且支持AAC-LD AAC-ELD, 对于要求低延迟的场景下很有用. 可以通 ...

  9. 让linux下的eclipse支持GBK编码

    原文链接:http://leaze.blog.51cto.com/83088/195584 今天,把windows下的工程导入到了Linux下eclipse中,由于以前的工程代码,都是GBK编码的,而 ...

随机推荐

  1. ADO.NET数据读取封装

    public class sqlserver { //private string sqlstr = System.ConfigurationManager.ConnectionStrings[&qu ...

  2. ubuntu server 网络配置,主机名配置

    一.通过命令ifconfig -a 查看可用网络设备 通过上面的命令,本机可用的网络设备为enp4s0f0 和enp4s0f1 ,不同的系统版本和硬件配置网络设备名可能不一样,所以一定要先确认本机可用 ...

  3. Java Web学习总结(10)——Session详解

    摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java ...

  4. python创建多层目录的方式

    将 os.mkdir 改成 os.makedirs(opDir) 哈.

  5. 什么是string interning(字符串驻留)以及python中字符串的intern机制

    Incomputer science, string interning is a method of storing only onecopy of each distinct string val ...

  6. HTTP/2 服务器推送(Server Push)教程(HTTP/2 协议的主要目的是提高网页性能,配置Nginx和Apache)

    HTTP/2 协议的主要目的是提高网页性能. 头信息(header)原来是直接传输文本,现在是压缩后传输.原来是同一个 TCP 连接里面,上一个回应(response)发送完了,服务器才能发送下一个, ...

  7. 使用PHP来压缩CSS文件

    这里将介绍使用PHP以一种简便的方式来压缩你的CSS文件.这种方法不需要命名你的.css文件和.php文件. 当前有许多方法需要将.css文件重命名成.php文件,然后在所有PHP文件中放置压缩代码. ...

  8. UICollectionView——整体总结

    前言 这几天有时间看了下UICollectionView的东西,才发觉它真的非常强大,很有必要好好学习学习.以前虽然用过几次,但没有系统的整理总结过.这两天我为UICollectionView做一个比 ...

  9. android 图片特效处理之 图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  10. 58.express安装问题:express不是内部也或者外部的命令解决方案

    转自:https://www.cnblogs.com/zhangym118/p/5842094.html "Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列 ...