php自动获取字符串编码函数mb_detect_encoding

当在php中使用mb_detect_encoding函数进行编码识别时,很多人都碰到过识别编码有误的问题,例如对与GB2312和UTF- 8,或者UTF-8和GBK(这里主要是对于cp936的判断),网上说是由于字符短是,mb_detect_encoding会出现误判。
例如:


代码如下:

$encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
if ($encode == “UTF-8″){
$keytitle = iconv("UTF-8″,"GBK",$keytitle);
}

这段代码的作用是检测字符串的编码是否UTF-8,是的话就转换为GBK。
可是当 $keytitle = “%D0%BE%C6%AC”;时。检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。
怎么解决呢,我的办法是:


代码如下:

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

三个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。
一般要先排gb2312,当有GBK和UTF-8时,需要将常用的排列到前面。

(0)

相关推荐

  • PHP实现ASCII码与字符串相互转换的方法

    本文实例讲述了PHP实现ASCII码与字符串相互转换的方法.分享给大家供大家参考,具体如下: <?php class ascii { /** * 将ascii码转为字符串 * @param type $str 要解码的字符串 * @param type $prefix 前缀,默认:&# * @return type */ function decode($str, $prefix="&#") { $str = str_replace($prefix, "

  • PHP详解ASCII码对照表与字符转换

    一,通用的ASCII码对照表 图解ASCII码对照表图,以字符A为例Dec表示十进制,如65Hx表示十六进制,如41Oct表示八进制,如101Char表示显示字符,如A ASCII码对照表图分为两个单元1,控制字符 0-31和1272,可显示字符 32-126(1)48-57为0到9十个阿拉伯数字:(2)65-90为26个大写英文字母:(3)97-122号为26个小写英文字母:(4)其它标点符号.运算符号等: 二,ASCII扩展码对照表 三,PHP字符转换函数说明 具体字符转换函数说明请参考[P

  • PHP安全的URL字符串base64编码和解码

    如果直接使用base64_encode和base64_decode方法的话,生成的字符串可能不适用URL地址.下面的方法可以解决该问题: URL安全的字符串编码: 复制代码 代码如下: function urlsafe_b64encode($string) {    $data = base64_encode($string);    $data = str_replace(array('+','/','='),array('-','_',''),$data);    return $data;

  • php下检测字符串是否是utf8编码的代码

    function is_utf8($string) {      return preg_match('%^(?:              [\x09\x0A\x0D\x20-\x7E]                 # ASCII          | [\xC2-\xDF][\x80-\xBF]                 # non-overlong 2-byte          |     \xE0[\xA0-\xBF][\x80-\xBF]             # exc

  • php实现图片转换成ASCII码的方法

    本文实例讲述了php实现图片转换成ASCII码的方法.分享给大家供大家参考.具体如下: php图片转换成ASCII码,转换后可以直接通过字符串显示图片 <html> <head> <title>Ascii</title> <style> body{ line-height:0; font-size:1px; } </style> </head> <body> <?php $image = 'image.j

  • PHP 截取字符串 分别适合GB2312和UTF8编码情况

    1. 截取GB2312中文字符串  复制代码 代码如下: <?php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; }

  • 解析php获取字符串的编码格式的方法(函数)

    如果不清楚字符串的编码格式的话,就可以将这段字符这样检查:$encode = mb_detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′)); echo $encode;这样就能知道它是什么编码的了.后续操作还可以为其转码:if ($encode == "UTF-8″){$string = iconv("UTF-8″,"GBK",$s

  • 浅析PHP的ASCII码转换类

    复制代码 代码如下: class ascii{function decode($str){    preg_match_all( "/(d{2,5})/", $str,$a);    $a = $a[0];    foreach ($a as $dec)    {        if ($dec < 128)        {            $utf .= chr($dec);        }        else if ($dec < 2048)      

  • php小技巧之过滤ascii控制字符

    还记得以前在工作中,将爬来的其它网站的数据导到xml.但是会遇到一个问题:即网页会有ascII的控制字符.一开始以为是别人为了防止采集而加入的,然后发现一个就往过滤表里加一个.直到慢慢发现,他们都是ascii表里的字符.找到原因了,就好解决了. 复制代码 代码如下: /**  * 根据ascii码过滤控制字符  * @param type $string  */public static function special_filter($string) {  if(!$string) retur

  • 浅析PHP中的字符串编码转换(自动识别原编码)

    复制代码 代码如下: /** * 对数据进行编码转换 * @param array/string $data       数组 * @param string $output    转换后的编码 */function array_iconv($data,$output = 'utf-8') { $encode_arr = array('UTF-8','ASCII','GBK','GB2312','BIG5','JIS','eucjp-win','sjis-win','EUC-JP'); $enc

  • php中支持多种编码的中文字符串截取函数!

    支持多种编码的中文字符串截取函数!   复制代码 代码如下: /*     * @todo 中文截取,支持gb2312,gbk,utf-8,big5      *     * @param string $str 要截取的字串     * @param int $start 截取起始位置     * @param int $length 截取长度     * @param string $charset utf-8|gb2312|gbk|big5 编码      * @param $suffix

  • php实现HTML实体编号与非ASCII字符串相互转换类实例

    HTML实体符号被用作实现保留字符(reserved characters)或者表达键盘无法输入的一些常用字符.在大多数浏览器中默认的字符集为ISO-8859-1.HTML实体符号我们在网页设计中经常用到. 例如: 因工作需要,编写了一个HTML实体编号与非ASCII字符串相互转换类,代码如下: HtmlEntitie.class.PHP <?php /** * HTML实体编号与非ASCII字符串相互转换类 * Date: 2016-09-07 * Author: fdipzone * Ver

随机推荐