`
fuyun
  • 浏览: 51624 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

utf编码的中文字符串截取处理(避免截取半字/乱码的情况)

PHP 
阅读更多
如下代码实现对utf-8编码的中文字符串进行截取,并在字符串长度超过截取长度时补上"..."省略号(网络上搜到的代码在判断的条件上有点小bug,这里做了修正).
关于utf-8编码的详细资料,参看UTF-8
<?php  
  function cutstr($sourcestr, $cutlength){
    $returnstr = ''; 
    $i = 0; 
    $n = 0; 
    $str_length = strlen($sourcestr);                      //字符串的字节数 
    while(($n < $cutlength) && ($i <= $str_length)){ 
      $temp_str = substr($sourcestr, $i, 1); 
      $ascnum = Ord($temp_str);                            //得到字符串中第$i位字符的ascii码 
      if($ascnum >= 224){                                  //如果ASCII位高与224,
        $returnstr = $returnstr.substr($sourcestr, $i, 3); //根据UTF-8编码规范,将3个连续的字符计为单个字符         
        $i = $i + 3;                                       //实际Byte计为3
        $n ++;                                             //字串长度计1
      }
      else if($ascnum >= 192){                             //如果ASCII位高与192,
        $returnstr = $returnstr.substr($sourcestr, $i, 2); //根据UTF-8编码规范,将2个连续的字符计为单个字符 
        $i = $i + 2;                                       //实际Byte计为2
        $n ++;                                             //字串长度计1
      }
      else if($ascnum >= 65 && $ascnum <= 90){             //如果是大写字母,
        $returnstr = $returnstr.substr($sourcestr, $i, 1); 
        $i = $i + 1;                                       //实际的Byte数仍计1个
        $n ++;                                             //但考虑整体美观,大写字母计成一个高位字符
      }
      else{                                                //其他情况下,包括小写字母和半角标点符号,
        $returnstr = $returnstr.substr($sourcestr, $i, 1); 
        $i = $i + 1;                                       //实际的Byte数计1个
        $n = $n + 0.5;                                     //小写字母和半角标点等与半个高位字符宽...
      } 
    } 
    if($str_length > $i){                                  //$str_length > $cutlength?
      $returnstr = $returnstr."...";                       //超过长度时在尾处加上省略号
    }
    return $returnstr;
  }
分享到:
评论

相关推荐

    中文字符串截取(支持各种编码格式)底层实现源码

    本文将深入探讨中文字符串截取的底层实现,以及如何在支持多种编码格式的情况下进行操作。 首先,我们需要了解字符串在计算机中的存储方式。在ASCII编码中,一个字符由一个字节表示,而对于中文字符,通常使用...

    impala中substr()截取中文字符串乱码的问题

    通过这种方式,我们能够克服Impala原生`substr()`函数在处理中文字符串时的局限性,实现更精确且无乱码的字符串截取操作。这种方法不仅适用于中文字符,还可以扩展到其他多字节字符集,如日文或韩文等。同时,这也是...

    以utf8格式截取的字符串编码

    在进行字符串截取操作时,选择适当且支持多字节的函数,确保文件和输出的编码一致,这些都是避免编码问题的关键。在提供的`test.php`文件中,很可能包含了使用`mb_strcut`或其他类似函数处理UTF-8字符串的示例代码,...

    java中截取带汉字的字符串

    ### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取...通过以上方法,我们可以在Java中有效地处理包含中文字符的字符串截取问题,避免出现乱码等情况。

    PHP中如何截取中文字符串

    总结,处理中文字符串截取时,理解字符编码和字符串处理函数的特性至关重要。PHP的mbstring扩展提供了强大且安全的方法来处理多字节字符,确保了中文字符串截取的准确性。在编写代码时,要时刻关注字符串的编码类型...

    字符串 截取

    根据给定文件的信息,本文将围绕“字符串截取”这一主题进行深入探讨,重点在于如何在Java环境下实现对包含中文字符的字符串进行精确截取,同时确保不会出现半个汉字的情况。 ### 字符串截取的基本概念 在计算机...

    字符串按照指定的字节数来截取

    但是,Java的字符串是Unicode的,`getBytes()`会根据指定的字符集编码字符串为字节数组。例如: ```java String str = "你好,世界"; int byteCount = 5; // 指定字节数 byte[] bytes = str.getBytes("UTF-8"); // ...

    字符串截取(按字节)

    在计算机编程中,字符串处理是一项基本而关键的任务,尤其在处理非英文字符时,如何精确地按照字节进行字符串截取变得尤为重要。本文将深入探讨一种按字节截取字符串的方法,并通过分析一个具体的Java代码示例来解释...

    JavaScript截取中文字符串

    本文将详细介绍一个专门用于处理中文字符串截取的JavaScript函数,该函数能够根据字符的实际编码长度来精确控制截取的长度。 #### 二、关键概念解析 ##### 2.1 字符串截取 字符串截取是指从一个较长的字符串中...

    Golang中文字符串截取函数实现原理

    在上述内容中,提到了使用[]rune来处理中文字符串截取问题。具体操作步骤包括:首先将原始字符串转换为[]rune类型,此时字符串中的每一个中文字符都对应着一个或多个rune值;然后基于rune值进行截取,这样无论截取的...

    C# 按照字节长度截取字符串

    在C#编程中,有时我们需要根据字节长度来截取字符串,这可能是因为要处理不同编码格式的数据,或者为了适应特定的传输...在实际应用中,确保对字符串编码的理解和处理方式的正确性至关重要,以避免可能出现的乱码问题。

    php字符串截取[文].pdf

    #### 一、GB2312中文字符串截取方法解析 在处理中文字符串时,特别是对于较旧的编码格式如GB2312,我们需要特别注意字符的编码方式以避免截取后出现乱码。下面详细介绍了一个针对GB2312编码的中文字符串截取函数。 ...

    php字符串截取.pdf

    #### 三、UTF-8编码字符串截取 **2.1 UTF-8中文字符串截取函数** UTF-8是一种可变长度的字符编码标准,中文字符在UTF-8中通常由三个字节组成。对于UTF-8编码的字符串截取,可以使用正则表达式的方法来进行处理。 ...

    [待删除]字符串截取 - 中英文

    给定代码片段展示了一种自定义的字符串截取方法`getSubString()`,它考虑了中文字符的特殊性。该方法接受四个参数:原字符串`str`、起始位置`start`、截取长度`length`和额外的字符串`more`。其中,`more`参数用于当...

    java中英文字符串截取

    3. **自定义截取逻辑**:由于标准的字符串截取方法(如`substring()`)不考虑字符的实际字节数,所以在处理包含中文的字符串时,可能需要实现自定义的截取逻辑,确保截取后的字符串不会出现乱码。 ### 示例代码解析...

    关于java按字节截取带有汉字的字符串的解法

    在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...

    解析使用substr截取UTF-8中文字符串出现乱码的问题

    通过以上方法,我们可以在使用PHP进行字符串操作时,正确地处理UTF-8编码的中文字符串,避免因为编码不一致而产生的乱码问题。这要求我们在进行字符串操作时,不仅要理解各种字符串函数的工作原理,而且还需要根据...

    C#(.net)中按字节数截取字符串最后出现乱码问题的解决

    最近需要用到按字节数截取字符串。在网上找了很多方法。 Encoding.Default.GetString采用的Default Encoding.UTF8.GetBytes采用的是utf-8编码。这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的...

    LabVIEW拆分中文字符串.rar

    在LabVIEW中处理字符串,尤其是中文字符串,有时会涉及到特殊的技巧和注意事项,因为中文字符是多字节的,与英文等单字节字符处理方式有所不同。这个"LabVIEW拆分中文字符串.rar"文件很可能是提供了一个解决此类问题...

Global site tag (gtag.js) - Google Analytics