Linux下php判断字符串编码

来源:互联网 发布:乐乎城市青年公寓 编辑:程序博客网 时间:2024/06/09 20:09

From:purple尘


本意是判断文件内容的编码的,以下内容仅针对linux环境:

在网上搜了半天再加上参考php手册、暂时了解到:

1、函数 mb_detect_encoding() 可以检测编码。这个函数最后一个参数为布尔型,true的话会进行严格的检测,需要安装扩展:mbstring.so。

     安装后再试下。

2、手册中写的,如果没有mb_detect_encoding了可以用下方所示代码进行检测,依赖的是icnov函数、这个函数也可以用mb_convert_encoding替换。

     两者是有区别的,后者貌似比前者靠谱、但是效率要慢,再具体就不太清楚了、感兴趣的可以去翻源码了。

     最下方是手册原话。

3、手册中这样使用iconv的原理不太清楚,暂时猜测:针对字符的解码与编码、只有当编码格式正确的时候、才是可逆的,具体是这样子:

     如果字符串是gbk编码的,那么用gbk对字符串进行解码再编码没问题;但是针对这个字符串用utf-8进行解码再编码的话就出事儿了、二进制的字节流会有变化,也就产生了损伤。



if the  function " mb_detect_encoding" does not exist  ... 

... try: 

<?php 
// ---------------------------------------------------- 
if ( !function_exists('mb_detect_encoding') ) { 

// ---------------------------------------------------------------- 
function mb_detect_encoding ($string$enc=null$ret=null) { 
       
        static 
$enclist = array( 
            
'UTF-8''ASCII'
            
'ISO-8859-1''ISO-8859-2''ISO-8859-3''ISO-8859-4''ISO-8859-5'
            
'ISO-8859-6''ISO-8859-7''ISO-8859-8''ISO-8859-9''ISO-8859-10'
            
'ISO-8859-13''ISO-8859-14''ISO-8859-15''ISO-8859-16'
            
'Windows-1251''Windows-1252''Windows-1254'
            );
        
        
$result false
        
        foreach (
$enclist as $item) { 
            
$sample iconv($item$item$string); 
            if (
md5($sample) == md5($string)) { 
                if (
$ret === NULL) { $result $item; } else { $result true; } 
                break; 
            }
        }
        
    return 
$result

// ---------------------------------------------------------------- 


// ---------------------------------------------------- 
?>

0 0
原创粉丝点击