`

字符串截取函数(避免utf8编码截取半个字符)

    博客分类:
  • PHP
阅读更多

 速度撒

/**
 * 截取字符串
 * @params $string:目标字符串;$sublen:截取长度
 */
function CutStr($string, $sublen, $start = 0, $code = 'UTF-8') {

    if($code == 'UTF-8') {
    	
    	$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
    	
        // 全局正则表达式匹配

        preg_match_all($pa, $string, $t_string);
    	
    	if( count( $t_string[0] ) - $start > $sublen ) {
    		
    		return join('', array_slice($t_string[0], $start, $sublen))."...";
    		
    	}
    	
    	return join('', array_slice($t_string[0], $start, $sublen));
    	
    } else {
    	
    	$start = $start * 2;
    	$sublen = $sublen * 2;
    	$strlen = strlen($string);
    	$tmpstr = '';
    	
    	for($i=0; $i<$strlen; $i++) {
    		
    		if($i>=$start && $i<($start+$sublen)) {
    			
    			if(ord(substr($string, $i, 1))>129) $tmpstr.= substr($string, $i, 2);
    			
    			else $tmpstr.= substr($string, $i, 1);
    		}
    		
    		if( ord( substr($string, $i, 1 ) ) > 129 ) $i++;
    		
     }
     
     if( strlen($tmpstr) < $strlen ) $tmpstr.= "...";
     
     return $tmpstr;
     
     }
  
  }
 
分享到:
评论
1 楼 waiting 2010-10-28  
mb_substr()

相关推荐

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

    在这个场景中,"以utf8格式截取的字符串编码"指的是在处理UTF-8编码的字符串时进行截取操作的方法和注意事项。 首先,我们要理解UTF-8编码的特点。UTF-8是一种变长编码,每个Unicode字符可能由1到4个字节来表示。...

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

    在IT领域,字符串处理是日常开发中的重要环节,特别是在处理包含中文字符的字符串时,由于中文字符占据的字节数量不同于英文字符,因此在截取字符串时需要考虑到不同的编码格式。本文将深入探讨中文字符串截取的底层...

    真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )

    根据给定文件信息,我们可以提炼出关于UTF-8编码和字符串截取函数的知识点。 首先,UTF-8编码是一种针对Unicode字符集的可变长度的字符编码方法。在UTF-8编码中,一个字符可能由1到4个字节表示,这取决于字符的...

    php字符串截取.pdf

    - 该函数利用正则表达式实现对UTF-8编码字符串的截取。 - 正则表达式`[\x00-\x7F]`匹配单字节的ASCII字符,`[\xC0-\xFF][\x80-\xBF]+`匹配多字节的UTF-8字符。 **2.1.2 示例代码** ```php echo utf8Substr('善良...

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

    byte_s = s.encode('utf-8') # 将字符串转为UTF-8编码的字节串 substring = byte_s[:n] # 截取前n个字节 ``` 这里的`n`是你要截取的字节数。注意,由于字符可能由多个字节组成(如UTF-8编码中的多字节字符),因此...

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

    这个自定义函数通过将字符串视为rune数组来处理中文字符截取问题,从而避免了因直接操作字节而造成的字符编码错误。通过这种方式,即使在中文字符串中进行任意位置和任意长度的截取,也能保证结果字符串的正确性和...

    php中的一个中文字符串截取函数

    5. 在开发cnSubStr函数时,需要考虑中文字符串的编码问题,因为中文字符串在UTF-8编码中占用多个字节。 6. cnSubStr函数可以通过for循环遍历字符串,每次循环都检查当前字符是否是中文字符,如果是,则截取两个字节...

    php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例

    在给定的文件中,有两个自定义的函数,`substr_for_gb2312` 和 `substr_for_utf8`,它们分别用于在GBK和UTF-8编码下正确地截取中文字符串。 首先,我们来看`substr_for_gb2312`函数。GBK是GB2312编码的扩展,它是一...

    ORACLE字符串函数

    该函数用于根据 POSIX 正则表达式截取字符串中的子串。例如,`substring('Thomas' from '...$')`将返回`'mas'`。 11. 字符串 SQL 正则表达式匹配函数:`substring(string from pattern for escape)` 该函数用于...

    php截断字符串优化函数 php截断字符串优化函数

    3. **使用`mb_substr()`处理多字节字符:**当处理包含多字节字符(如UTF-8编码的中文字符)的字符串时,`substr()`可能无法正确处理。这时,可以使用`mb_substr()`函数,它能够识别多字节字符并正确截取。例如: ``...

    PHP 不区分中英文截取utf8字符串

    PHP中,`substr()`函数是用于截取字符串的常用方法,但对UTF-8编码的字符串处理并不理想。要实现不区分中英文的截取,我们需要使用`mb_substr()`函数,它是PHP的多字节字符串处理函数,能处理各种字符编码,包括UTF-...

    多个PHP中文字符串截取函数

    `utf8Substr` 函数使用正则表达式来截取UTF-8编码的多字节字符串。正则表达式匹配指定范围内的UTF-8字符,并仅返回这些字符,从而实现了字符串的截取。 最后,`cut_str` 函数是一个通用的汉字截取函数,支持UTF-8和...

    php通用截取字符串.zip

    当处理多字节字符(如UTF-8编码)时,应使用 `mb_substr()`,因为它能正确识别不同字符集中的字符。其用法与 `substr()` 类似,但更健壮: ```php mb_substr($str, $start, $length, $encoding); ``` 3. **str...

    PHP中如何截取中文字符串

    在上面的代码中,`mb_substr()`函数的第三个参数指定了字符编码,确保了正确处理UTF-8字符串。 2. **使用iconv扩展** `iconv()`函数可以转换字符串的编码,同时也可以配合`strncasecmp()`函数实现截取: ```php $...

    按字节长度截取字符串(支持截取带HTML代码样式的字符串)

    首先,理解为什么需要按照字节长度而不是字符长度截取字符串。在处理非ASCII字符(如中文、日文等)时,一个字符可能占用多个字节。如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,...

    php字符串截取[文].pdf

    下面介绍了一个可以同时支持UTF-8和GB2312编码的字符串截取函数。 ##### 函数定义: ```php function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') ``` - **$string**:待截取的字符串。 - **$sublen*...

    易语言判断UTF-8字符

    4. **字符串处理技巧**:在易语言中,可以结合其他字符串处理函数,如`取字符串长度`、`截取字符串`等,配合`IsTextUTF8`来实现更复杂的文本操作,例如将非UTF-8字符串转换为UTF-8,或者从UTF-8字符串中提取特定部分...

    thinkPHP内置字符串截取函数用法详解

    比如今天我们说的截取字符串函数,在thinkphp模板引擎里可以这样写:{$vo.title|msubstr=0,5,’utf-8′,false} 至于{$vo.title}这个大家肯定不陌生了。就说说后边的函数msubstr吧。它代表的意思是截取字符串$vo....

    【分享】字符串截取标签

    7. **编码问题**:在处理非ASCII字符时,需要考虑字符编码,如UTF-8、GBK等,确保正确截取和处理多字节字符。 8. **效率优化**:对于大量字符串处理,优化截取方法可以提高程序性能。例如,使用原地操作而非创建新...

Global site tag (gtag.js) - Google Analytics