php中文截取无乱码

<?php
header(‘Content-Type:text/html;charset=utf-8‘);
function cutstr($str,$len){
    if($len<0){return null;}
    $chars = 0; //字符数量
    $offset = 0;
    $res = ‘‘;

        while($chars < $len){
            $high = decbin(ord(substr($str,$offset,1)));
            
            if(strlen($high) < 8){
                $count = 1;
            }else if(substr($high,0,3) == ‘110‘){
                $count = 2;
            }else if(substr($high,0,4)== ‘1110‘){
                $count = 3;
            }
            echo $count.‘<br/>‘;
            $res .= substr($str,$offset,$count);
            $chars += 1;
            $offset += $count;
        }
        return $res;
    }
$str = ‘你好aaaaa‘;
echo cutstr($str,2);

 ?>

php中文截取无乱码

时间: 2024-12-28 17:49:23

php中文截取无乱码的相关文章

PHP实现中文截取无乱码

字符串的处理是编程中比较常见的,各种编程语言对字符串的处理也提供了大量函数,像php中mb_substr()函数可以实现对中文字符串的截取,如何使用自定义方法实现中文字符串截取无乱码这也是面试经常遇到的一道题目,不要觉得这是多此一举,php内置函数已经实现了,为什么要自己实现.其实这道题的真实目的是考查你对字符编码的理解.最起码你要知道从哪里开始截取,截取几个字节才是一个完整的字符,不然截取到的都是乱码.这就需要你对多字节字符编码有一定的了解.下面一起来实现吧. 1 <?php 2 /** 3

中文截取无乱码

/* *中文截取无乱码 */ function showsubstr_chinese($str, $start, $length = null) { return join("", array_slice( preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length)); }

PHP中实现中文字串截取无乱码的方法

在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节. 直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了.

php截取中文字符串无乱码的方法

利用php内置方法mb_substr截取中文不乱码,使用起来非常简单 <?php $str = '我喜欢laravel or yii2'; echo mb_substr($str, 0, 1, 'utf8'); //输出 我 exit; mb_substr方法比substr多一个参数,用来指定字符串编码.utf-8编码截取示例 $str = '我like laravel or yii2'; echo mb_substr($str, 0, 2, 'utf8'); //输出 我I 中英混合也完全没有

php实现中文字符串截取无乱码的方法

首页要知道的:1.中文字符在gbk编码下占2个字节,在utf-8编码下占3个字节 2.ord() 函数返回字符串第一个字符的 ASCII 值 3.中文字符的ASCII值是大于0xa0. 关键的点是判断要截取的字符串是中文字符还是英文字符,用ord(substr($str,$start,1))>0xa0可判断,大于则是中文,否则是英文.实现代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

PHP实现中文字串截取无乱码的方法

直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). ============================= substr()函数可以分割文字,但要分割的文字如果包括中文字符往往

【技术宅1】实现中文字串截取无乱码的方法

function substr_text($str, $start=0, $length, $charset="utf-8", $suffix=""){ if(function_exists("mb_substr")){//mb_substr函数不是php内置函数,需要加载php.mbstring.dll才能使用,否则报错 return mb_substr($str, $start, $length, $charset).$suffix; }el

PHP中文无乱码截取

正在上传文件反正无聊 就把php无乱码截取写出来吧` 参数说明 gbk    字符编码中,存储中文字符要2个字节 uft-8  字符编码中,存储中文字符要3个字节 0xa0  半个汉字 ord()— 返回字符的 ASCII 码值 chr() — 返回指定的字符 在网上我也看到一些截取中文的函数 但是我认为他们是有缺陷的 如不能区别utf-8  gbk的字符集 中文 于是我自己写了一个 但是我却发现我写的函数其实是用mb系列函数 ,我也是廋少不了 header("content-type:text

php截取中文无乱码

在PHP中需要对字符串进行截取,如果没有装mb扩展(mb_substr函数),对中文截取就需要进行相应的处理.下面是对字符串 "世s界s的功s\\\夫萨的mn是非得失sdf dsf dsf 达" 截取10个字符,最后的输出是"世s界s的",编码均为utf8: <?php$ss = '世s界s的功s\\\夫萨的mn是非得失sdf dsf dsf 达';$aa = CHsubstr($ss, 0, 10);echo($aa); function CHsubstr(