zoukankan      html  css  js  c++  java
  • 自己实现php UTF8中文字符串截取

    header("Content-type: text/html; charset=utf-8");
    function my_substr($str,$begin,$length){
            $i = $begin;
            $result="";
            while($length > 0){
                if([color=red]ord($str[$i])>127[/color]){
                    $result .= substr($str,$i,3);
                    $i = $i+3;
                }else{
                    $result .= substr($str,$i,1);
                    $i++;
                }
                $length--;
            }
            return $result;
        }
    
        $chinese = "中a国people";
        
        echo "<br>".my_substr($chinese,0,3);

    输出结果是:中a国

    说明:
    ord 是 对字符去assic值。
    chr 是 对assic取字符。

    为什么判断assic大于127。

    这里是ASSIC码表
    http://www.asciitable.com/

    计算机中最开始只有ASSIC编码,用来表示字符。一个ASSIC字符用一个BYTE表示。所以ASSIC最多就只有256种组合。对于英文是够用了,中文,日文,韩文等亚洲语种就不够了。
    那么只能考虑用多个BYTE表示一个中文汉字,比如GB2312 就是用2个字节表示一个汉字。在windows中用笔记本新建一个TXT保存为ASSIC,如果你是简体中文操作系统,TXT中的中文就是一GB2312来保存的。上面的截取字符串的程序$result .= substr($str,$i,3);中的3就要改成2.同时别忘了修改header。而无论GB2312 还是UTF8 他们表示A-Z等ASSIC 128以前的都是一样的,是一位BTYE表示,是变长编码的。所以可以用ASSIC判断他们是不是中文。

    写的可能比较乱。有需要的谨慎阅读。

  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/23lalala/p/2703660.html
Copyright © 2011-2022 走看看