【4858.com】php中mb_detect_encoding检查实验文件编码方法,php检查评定文件编码的法子身体力行

By admin in 4858.com on 2019年7月21日

关于文件编码的检查实验,百度时而一大把都以,然而真的并未有能用的、非常多个人建议mb_detect_encoding
检验,不过不知为什么笔者那不成功,什么都没输出、看到有人写了个巩固版,用 BOM
判别的,作者决然就无所谓了,那东西完全不可靠、最后依附PHP手册里
mb_detect_encoding 函数下方的例子,本身写了一个检查实验函数,
还包罗自动检验编码并按引导编码读取文件的函数、源码献上。

有关文件编码的检测,百度时而第一次全国代表大会把都是,可是真的没有能用的、
洋塞尔维亚人提出
mb_detect_encoding()
检查测量检验,可是不知缘何小编那不成功,什么都没输出、
拜见有人写了个加强版,用 BOM
决断的,小编二话没说就无所谓了,那东西完全不可信赖、
末段依据PHP手册里 mb_detect_encoding
函数下方的例证,本身写了三个检验函数,
还包罗自动物检疫验编码并按教导编码读取文件的函数、
源码献上,不喜勿喷。
英特网的点子自己试过没用才写的,说不定境遇区别导致的。
于是一旦没用,也别喷笔者,笔者只是分享想思路而已、、

至于文件编码的检查测量试验,百度时而一大把都以,不过真正尚未能用的、
成千上万人建议 mb_detect_encoding
检查实验,但是不知为什么作者那不成功,什么都没输出、
看看有人写了个巩固版,用 BOM
剖断的,作者坚决就无所谓了,那东西完全不可信、
终极基于PHP手册里 mb_detect_encoding
函数下方的例子,自个儿写了贰个检查实验函数,
还包蕴自动物检疫查实验编码并按教导编码读取文件的函数、
源码献上,不喜勿喷。
互连网的办法自身试过没用才写的,说不定蒙受分歧导致的。
据此一旦没用,也别喷作者,作者只是分享想思路而已、、

在php中得以用mb_detect_encoding()()函数来推断贰个字符串是不是为某种编码,具体使用格局和注意事项如下:

复制代码 代码如下:

php手册是这么表达的:

复制代码 代码如下:

亟待留心的是,要利用mb_detect_encoding函数,必须拉开php中的mbstring增添(张开php.ini配置,重启服务就可以)。

<?php
 /**
* 检验文件编码
 * @param string $file 文件路线
* @return string|null 返回 编码名 或 null
*/
 function detect_encoding($file) {
     $list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’,
‘ISO-8859-1’);
     $str = file_get_contents($file);
     foreach ($list as $item) {
         $tmp = mb_convert_encoding($str, $item, $item);
         if (md5($tmp) == md5($str)) {
             return $item;
         }
     }
     return null;
}

mb_detect_encoding — 检查测量检验字符的编码,  string mb_detect_encoding (
string $str [, mixed $encoding_list = mb_detect_order() [, bool
$strict = false ]] )

<?php
/**
* 检测文件编码
* @param string $file 文件路线
* @return string|null 返回 编码名 或 null
*/
function detect_encoding($file) {
$list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’, ‘ISO-8859-1’);
$str = file_get_contents($file);
foreach ($list as $item) {
$tmp = mb_convert_encoding($str, $item, $item);
if (md5($tmp) == md5($str)) {
return $item;
}
}
return null;
}

看清方式如下所示:

/**
* 自动解析编码读入文件
* @param string $file 文件路线
* @param string $charset 读取编码
* @return string 重临读取内容
*/
function auto_read($file, $charset=’UTF-8′) {
    $list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’,
‘ISO-8859-1’);
     $str = file_get_contents($file);
     foreach ($list as $item) {
        $tmp = mb_convert_encoding($str, $item, $item);
        if (md5($tmp) == md5($str)) {
             return mb_convert_encoding($str, $charset, $item);
         }
     }
    return “”;
}

这些函数有七个参数 分别是:

/**
* 自动分析编码读入文件
*【4858.com】php中mb_detect_encoding检查实验文件编码方法,php检查评定文件编码的法子身体力行。 @param string $file 文件路线
* @param string $charset 读取编码
* @return string 再次来到读取内容
*/
function auto_read($file, $charset=’UTF-8′) {
$list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’, ‘ISO-8859-1’);
$str = file_get_contents($file);
foreach ($list as $item) {
$tmp = mb_convert_encoding($str, $item, $item);
if (md5($tmp) == md5($str)) {
return mb_convert_encoding($str, $charset, $item);
}
}
return “”;
4858.com ,}

if( mb_detect_encoding($str, ‘UTF-8’, true) )
{
    //是UTF-8格式的字符
}

您大概感兴趣的小说:

  • php下检查评定字符串是还是不是是utf8编码的代码
  • 谐和写了二个php检验文件编码的函数
  • 左右逢源的2个php检查评定字符串是或不是是utf-8编码函数分享
  • PHP检查评定字符串是不是为UTF8编码的常用方法
  • php检查测量试验文本的编码

1.str:待检查的字符串 www.111cn.net 。      

你恐怕感兴趣的篇章:

  • php下检查实验字符串是不是是utf8编码的代码
  • php检查实验文件编码的格局以身作则
  • 全盘的2个php检查实验字符串是或不是是utf-8编码函数分享
  • PHP检验字符串是还是不是为UTF8编码的常用方法
  • php检查实验文本的编码

互连网有一些人说那些函数决断不太筹算,其实大约依旧没难点的。

2.encoding_list:encoding_list 是一个字符编码列表。
编码顺序可以由数组也许逗号分隔的列表字符串钦定。

例子,利用mb_detect_encoding()判定字符是或不是为uft-8编码。

假设轻巧了 encoding_list 将会选择 detect_order。      

$encode = mb_detect_encoding($q, array(‘GB2312′,’GBK’,’UTF-8′));
echo $encode.”<br/>”;
if($encode==”GB2312″)
{
    $q =
iconv(“GBK”,”UTF-8″,$q);
}
else if($encode==”GBK”)
{
    $q = iconv(“GBK”,”UTF-8″,$q);
}
else if($encode==”EUC-CN”)
{
    $q = iconv(“GBK”,”UTF-8″,$q);
}
else//CP936
{
    //$q = iconv(“GB2312″,”UTF-8”,$q);
}

3.strict:strict 钦赐了是还是不是严谨地检验编码。 暗许是 FALSE。      

可是 mb_detect_encoding
存在三个硬伤,常常出现剖断不标准的事态。可能那样就足以消除:

上边举个例证:

// 使用 iconv 转换并剖断是还是不是等值,作用不高
function is_utf8 ($str) {
    if ($str === iconv(‘UTF-8’, ‘UTF-8//IGNORE’, $str)) {
        return ‘UTF-8’;
    }
}
// 多种编码的图景
function detect_encoding ($str) {
    foreach (array(‘GBK’,
‘UTF-8’) as $v) {
        if ($str === iconv($v, $v . ‘//IGNORE’, $str)) {
            return $v;
        }
    }
}

 代码如下

通过以上办法赢得字符串编码音信后,就足以行使 iconv 或
mb_convert_encoding 来转换编码了

$encode =
mb_detect_encoding($keytitle,array(‘ASCII’,’GB2312′,’GBK’,’UTF-8′));

例子

四个参数分别是:被检查测量试验的输入变量.编码格局的检查测验顺序(一旦为真,后面自动忽略).

<?php
/**
 * 检查测量检验文件编码
 * @param string $file 文件路线
 * @return string|null 返回 编码名 或 null
 */
function detect_encoding($file) {
    $list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’,
‘ISO-8859-1’);
    $str = file_get_contents($file);
    foreach ($list as $item) {
        $tmp = mb_convert_encoding($str, $item, $item);
        if (md5($tmp) == md5($str)) {
            return $item;
        }
    }
    return null;
}
/**
 * 自动分析编码读入文件
 * @param string $file 文件路线
 * @param string $charset 读取编码
 * @return string 重回读取内容
 */
function auto_read($file, $charset=’UTF-8′) {
    $list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’,
‘ISO-8859-1’);
    $str = file_get_contents($file);
    foreach ($list as $item) {
        $tmp = mb_convert_encoding($str, $item, $item);
        if (md5($tmp) == md5($str)) {
            return mb_convert_encoding($str, $charset, $item);
        }
    }
    return “”;
}

strict格局对编码检验的次第举办调度,将最大恐怕放在目前,那样裁减被八花九裂转变的时机.

例子

一般要先排gb2312,当有GBK和UTF-8时,必要将常用的排列到前面

自我创造多个文本:text1.txt  text2.txt text3.txt

完全实例

各自以ASCII UTF-8 UNICODE 的编码形式保存

 代码如下

代码如下:

<?php
/**
 * 检验文件编码
 * @param string $file 文件路线
 * @return string|null 返回 编码名 或 null
 */
function detect_encoding($file) {
    $list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’,
‘ISO-8859-1’);
    $str = file_get_contents($file);
    foreach ($list as $item)
{
        $tmp = mb_convert_encoding($str, $item, $item);
        if (md5($tmp) == md5($str)) {
            return $item;
        }
    }
    return null;
}

 

/**
 * 自动深入分析编码读入文件
 * @param string $file 文件路线
 * @param string $charset 读取编码
 * @return string 重返读取内容
 */
function auto_read($file, $charset=’UTF-8′) {
    $list = array(‘GBK’, ‘UTF-8’, ‘UTF-16LE’, ‘UTF-16BE’,
‘ISO-8859-1’);
    $str = file_get_contents($file);
    foreach ($list as $item) {
        $tmp = mb_convert_encoding($str, $item, $item);
        if (md5($tmp) == md5($str)) {
            return mb_convert_encoding($str, $charset, $item);
        }
    }
    return “”;
}

 

最后推荐一篇php
检查测验字符编码mb_detect_encoding()函数

<?php
define (‘UTF32_BIG_ENDIAN_BOM’   , chr(0x00) . chr(0x00) . chr(0xFE)
. chr(0xFF));
define (‘UTF32_LITTLE_ENDIAN_BOM’, chr(0xFF) . chr(0xFE) . chr(0x00)
. chr(0x00));
define (‘UTF16_BIG_ENDIAN_BOM’   , chr(0xFE) . chr(0xFF));
define (‘UTF16_LITTLE_ENDIAN_BOM’, chr(0xFF) . chr(0xFE));
define (‘UTF8_BOM’               , chr(0xEF) . chr(0xBB) . chr(0xBF));

function detect_utf_encoding($text) {
    $first2 = substr($text, 0,
2);
    $first3 = substr($text, 0, 3);
    $first4 = substr($text, 0, 3);
  
    if ($first3 == UTF8_BOM) return ‘UTF-8’;
    elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return ‘UTF-32BE’;
    elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return ‘UTF-32LE’;
    elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return ‘UTF-16BE’;
    elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return ‘UTF-16LE’;
}
function getFileEncoding($str){
    $encoding=mb_detect_encoding($str);
    if(empty($encoding)){
        $encoding=detect_utf_encoding($str);
    }
    return $encoding;
}
$file = ‘text1.txt’;
echo getFileEncoding(file_get_contents($file));  // 输出ASCII
echo ‘<br />’;

$file = ‘text2.txt’;
echo getFileEncoding(file_get_contents($file));  // 输出UTF-8
echo ‘<br />’;
$file = ‘text3.txt’;
echo getFileEncoding(file_get_contents($file));  // 输出UTF-16LE
echo ‘<br />’;
?>

注意:要把php.ini中 extension=php_mbstring.dll
前的;号去掉,重启apache就可以了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有