设为首页 收藏本站
查看: 887|回复: 0

[经验分享] php_字符串编码ASCII_GBK_UTF-8检测_中文字符串_求子串

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2017-4-14 08:24:27 | 显示全部楼层 |阅读模式
  <?php

//判断一个字符,是否ASCII
//'a'
//[0]
//ord('a') = 97
//字母..
function isCharASCII($s){
    return (ord($s[0]) < 128);
}
//
//echo '<hr/>';
//var_dump(isCharASCII('a'));
//var_dump(isCharASCII('A'));
//var_dump(isCharASCII('0'));
//var_dump(isCharASCII('#'));
// echo ord('z');//122  a 97
//echo '<br>';
//$str = '国';
//var_dump($str[1]);

//echo (chr(192).chr(128));
/**
 * 11100000 [UTF-8 开头]
 * 128 + 64 + 32 =
 *  96
 * 224
 * Enter description here ...
 * @param unknown_type $s
 */
//????
//对于汉字GB编码第一个字节是\\


//GBK
//一个汉字  "中" 第二个字节是
//110***** 192
//10****** 128



//(有特例,比如联字)
//UTF-8编码第一个字节是1110****第二个字节是10******第三个字节是10******
//按位与出来结果要跟上面非星号相同,所以应该先判断UTF-8
//因为使用GB的掩码按位与,UTF-8的111得出来的也是110,所以要先判断UTF-8



//UTF-8
//通用...
//三个字节存一个汉字。。
//11100000  224
//10000000  128
//10000000  128



//对于英文,GB和UTF-8都是单字节的
//ASCII码小于128的值  afdfz A
//ASCII  GBK  UTF-8;;
function isUTF8OrGBK($s){
    if((ord($s[0])&224)==224){
        if((ord($s[1])&128)==128){
            if((ord($s[2])&128)==128){
                return 'UTF-8';
            }
        }
    }
//128 + 64 = 192  = 
    if((ord($s[0])&192)==192){
        if((ord($s[1])&128)==128){
            return "GBK";
        }
    }
    return NULL;
}
//=========================
//1100 0000
//c    0


//echo '<hr/>';
//var_dump(isUTF8OrGBK('a'));
//echo '<hr/>';
//var_dump(isUTF8OrGBK('中'));
//echo '<br />';
//$s = iconv("GBK", "UTF-8", '中');
//echo $s;
//var_dump(isUTF8OrGBK($s));

//$i = 1;
//$j = 1;
//$i 00000000 00000000 00000000 00000001
//$j 00000000 00000000 00000000 00000001
//---------------------------------------
//   00000000 00000000 00000000 00000001
//
//1 & 1 = 1
//0 & 1 = 0
//1 & 0 = 0;
//0 & 0 = 0

//192 128 + 64 = 192
//               193
//               224
//00000000 00000000 00000000 11000000
//00000000 00000000 00000000 11000001
//------------------------------------
//00000000 00000000 00000000 11000000


//128 + 64 + 32 = 224
//00000000 00000000 00000000 11000000
//00000000 00000000 00000000 11100000
//---------------------------------------
//00000000 00000000 00000000 11000000

//192  128
//00000000 00000000 00000000 11000000
//00000000 00000000 00000000 10000000
//=====================================
//00000000 00000000 00000000 10000000 128


//echo $i & $j;


echo '<hr/>';
function msubstr($str, $start, $len) {
    $tmpstr = '';
    $strlen = $start + $len;// $strlen = 2
    //$str = 0;
    for($i = 0; $i < $start; $i++){
       if(isGBK($str[$i])){
         $start++;
         $strlen++;
         $i++;
       }
    }

    for($i = $start; $i < $strlen; $i++) { // 0 1
        if(ord(substr($str, $i, 1)) >= 0xa0) {//0xa0  瓜
            $strlen++;
            $tmpstr .= substr($str, $i, 2);   // $tmpstr = "西";
            $i++;
        } else
        $tmpstr .= substr($str, $i, 1);
    }
    return $tmpstr;
}

function isGBK($s){
    return ord(substr($s, 0, 1)) >= 0xa0;
}

//echo msubstr("西瓜cd", 0, 2).'<br/>';        //西瓜
//echo msubstr("a中cd", 0, 2).'<br/>';         //a中
//echo msubstr("中ac国人民cd", 3, 3).'<br/>';  //国人民
//echo msubstr("中中国人民cd", 3, 3).'<br/>';  //人民c
//echo msubstr("中中ac国人民cd", 3, 3).'<br/>';//c国人
//echo msubstr("中中ac国人民cd", 3, 1).'<br/>';//c
//echo msubstr("中中ac国人民cd", 3, 2).'<br/>';//c国
//echo msubstr("中ab国df人gdf民共和国cd",5,3).'<br/>';



//var_dump(isGBK('a'));
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364673-1-1.html 上篇帖子: php ASCII 字符转换 (汉字及特殊字符) 宽字符 (uft8/unicode) 下篇帖子: PHP理解之二:include,include_once,require,require_once之间的区别【转】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表