如下代码实现对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()`函数在处理中文字符串时的局限性,实现更精确且无乱码的字符串截取操作。这种方法不仅适用于中文字符,还可以扩展到其他多字节字符集,如日文或韩文等。同时,这也是...
在进行字符串截取操作时,选择适当且支持多字节的函数,确保文件和输出的编码一致,这些都是避免编码问题的关键。在提供的`test.php`文件中,很可能包含了使用`mb_strcut`或其他类似函数处理UTF-8字符串的示例代码,...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取...通过以上方法,我们可以在Java中有效地处理包含中文字符的字符串截取问题,避免出现乱码等情况。
总结,处理中文字符串截取时,理解字符编码和字符串处理函数的特性至关重要。PHP的mbstring扩展提供了强大且安全的方法来处理多字节字符,确保了中文字符串截取的准确性。在编写代码时,要时刻关注字符串的编码类型...
根据给定文件的信息,本文将围绕“字符串截取”这一主题进行深入探讨,重点在于如何在Java环境下实现对包含中文字符的字符串进行精确截取,同时确保不会出现半个汉字的情况。 ### 字符串截取的基本概念 在计算机...
但是,Java的字符串是Unicode的,`getBytes()`会根据指定的字符集编码字符串为字节数组。例如: ```java String str = "你好,世界"; int byteCount = 5; // 指定字节数 byte[] bytes = str.getBytes("UTF-8"); // ...
在计算机编程中,字符串处理是一项基本而关键的任务,尤其在处理非英文字符时,如何精确地按照字节进行字符串截取变得尤为重要。本文将深入探讨一种按字节截取字符串的方法,并通过分析一个具体的Java代码示例来解释...
本文将详细介绍一个专门用于处理中文字符串截取的JavaScript函数,该函数能够根据字符的实际编码长度来精确控制截取的长度。 #### 二、关键概念解析 ##### 2.1 字符串截取 字符串截取是指从一个较长的字符串中...
在上述内容中,提到了使用[]rune来处理中文字符串截取问题。具体操作步骤包括:首先将原始字符串转换为[]rune类型,此时字符串中的每一个中文字符都对应着一个或多个rune值;然后基于rune值进行截取,这样无论截取的...
在C#编程中,有时我们需要根据字节长度来截取字符串,这可能是因为要处理不同编码格式的数据,或者为了适应特定的传输...在实际应用中,确保对字符串编码的理解和处理方式的正确性至关重要,以避免可能出现的乱码问题。
#### 一、GB2312中文字符串截取方法解析 在处理中文字符串时,特别是对于较旧的编码格式如GB2312,我们需要特别注意字符的编码方式以避免截取后出现乱码。下面详细介绍了一个针对GB2312编码的中文字符串截取函数。 ...
#### 三、UTF-8编码字符串截取 **2.1 UTF-8中文字符串截取函数** UTF-8是一种可变长度的字符编码标准,中文字符在UTF-8中通常由三个字节组成。对于UTF-8编码的字符串截取,可以使用正则表达式的方法来进行处理。 ...
给定代码片段展示了一种自定义的字符串截取方法`getSubString()`,它考虑了中文字符的特殊性。该方法接受四个参数:原字符串`str`、起始位置`start`、截取长度`length`和额外的字符串`more`。其中,`more`参数用于当...
3. **自定义截取逻辑**:由于标准的字符串截取方法(如`substring()`)不考虑字符的实际字节数,所以在处理包含中文的字符串时,可能需要实现自定义的截取逻辑,确保截取后的字符串不会出现乱码。 ### 示例代码解析...
在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...
通过以上方法,我们可以在使用PHP进行字符串操作时,正确地处理UTF-8编码的中文字符串,避免因为编码不一致而产生的乱码问题。这要求我们在进行字符串操作时,不仅要理解各种字符串函数的工作原理,而且还需要根据...
最近需要用到按字节数截取字符串。在网上找了很多方法。 Encoding.Default.GetString采用的Default Encoding.UTF8.GetBytes采用的是utf-8编码。这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的...
在LabVIEW中处理字符串,尤其是中文字符串,有时会涉及到特殊的技巧和注意事项,因为中文字符是多字节的,与英文等单字节字符处理方式有所不同。这个"LabVIEW拆分中文字符串.rar"文件很可能是提供了一个解决此类问题...