支持utf8的str_split函数

<?php
header("Content-type: text/html; charset=utf-8");
/**
 * 按字节数对字符串进行分片
 * @param  $str    需要分片的字符串
 * @param  $length 每片字符串的字节数
 * @return 分片后的数组
 */
function utf8_str_split($str,$length) {
    if (!preg_match("/([\x81-\xfe][\x40-\xfe])/", $str, $match)) return str_split($str, $length); //不包含中文的字符串
    $str_length = strlen($str);
    if($str_length <= $length) return array($str);
    $results = array();
    $tmp_str = ‘‘;
    $tmp_str_length = 0;
    for ($i=0; $i < $str_length; $i++) {
        $ord = ord($str[$i]);
        if($ord < 128) { //单字节 0~127
            $tmp_str .= $str[$i];
            $tmp_str_length += 1;
        }elseif($ord < 224) { //双字节 192~223
            $tmp_str .= $str[$i].$str[$i+1];
            $i += 1;
            $tmp_str_length += 2;
        }elseif($ord < 240) { //三字节 224~237
            $tmp_str .= $str[$i].$str[$i+1].$str[$i+2];
            $i += 2;
            $tmp_str_length += 3;
        }elseif ($ord < 248) { //四字节 240~247
            $tmp_str .= $str[$i].$str[$i+1].$str[$i+2].$str[$i+3];
            $i += 3;
            $tmp_str_length += 4;
        }
        //判断下一次截取时 字符字节数是否会大于需要的字节数 或者已截取到最后字节
        if(($tmp_str_length+4) > $length || ($i+1) == $str_length) {
            $results[] = $tmp_str;
            $tmp_str = ‘‘;
            $tmp_str_length = 0;
        }
    }
    return $results;
}
$a = ‘截取的变量是宽度width而不是长度length。‘;
$length = 10;
print_r(utf8_str_split($a,$length));
时间: 2024-10-28 15:26:20

支持utf8的str_split函数的相关文章

解决Delphi7的自带的UTF-8编码转换函数BUG

Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Delphi7自带的utf-8转换函数遇到其无法识别的字符串就返回空. 用以下转换函数可以解决这个bug unit util_utf8; interface uses Windows; type UTF8String = AnsiString; function AnsiToWide(const S: A

Native2asciiUtil 文本文件转UNICODE编码文件(支持UTF-8,Unicode,UTF-16BE,ANSI|ASCII,GBK)

package com.ctl.util; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * * @author Administrator * @Description \u5C06\u6587\u672C\u6587\u4EF6\u8F6C\

sublime支持utf-8的C源代码的方法,其他的乱码情况参考。

自从用了sublime 一直使用sublime+gcc进行写C程序,但是有个问题很扰人. 一般新建的源文件是utf-8的编码模式,但是windows控制台是gbk的编码(sublime的console无法输入,遂放弃,而调用win的cmd),中文显示会造成乱码. 而win要修改注册表的键值才能支持utf-8,但是修改过后,也会造成一些麻烦,java的又会乱码. 1.sublime使用其他控制台程序(没成功,智伤,,,不会) 2.在百度中查到一种办法,就是在控制台输入命令,暂时性的修改成支持utf

在Windows的CMD中如何设置支持UTF8编码?

这个问题很多人开始都会不知道,当然包括曾经的我,当用到的时候,只好求助于伟大的股沟和度娘了.网上有设置的方法,但说明确不够详细系统,说设置字体 为:Lucida Console.问题是,在默认方式下,只有点阵字体,哪有什么Lucida Console.所以,在自己成功设置后,拿出来和大家分享下过程,下面就让我们找出Lucida Console来设置吧. 这里需要先了解些内容: CHCP CHCP是MS DOS中的命令,用来显示或设置活动代码页编号的.用法是: CHCP [nnn] 其中nnn指定

php开启mbstring扩展并设置支持utf-8编码

前一段时间使用一个服务的接口,因为调用接口时使用的参数里面有中文,调用接口会出现异常问题,后来才明白是编码不一致的问题.然而,我本地项目开发使用的是utf-8,接口那边也是需要utf-8的,那么问题来了,到底哪里的编码不一致呢? 请教了一下高手,原来是php的扩展mbstring没有开启,下面就是开启mbstring扩展,并配置支持utf-8编码的方法: 首先,去掉;extension=php_mbstring.dll 前面的";"号,开启mbstring扩展: 然后,将对应项都改成下

字符截取 支持UTF8/GBK

/** * 字符截取 支持UTF8/GBK * @param $string * @param $length * @param $dot */function str_cut($string, $length, $dot = '...') {    $strlen = strlen($string);    if($strlen <= $length) return $string;    $string = str_replace(array(' ',' ', '&', '"'

php str_split()函数 语法

php str_split()函数 语法 str_split()函数怎么用 php str_split()函数用于把字符串分割到数组中,语法是str_split(string,length),将字符串按规定长度分割组成数组.富瑞华大理石平台 作用:把字符串分割到数组中 语法:str_split(string,length) 参数: 参数 描述 string 必须,要分割的字符串 length 可选,规定每个数组元素的长度,默认为1,如果length小于1,则返回false,如果length长度大

myasql支持的数据类型以及函数转换

myasql支持的数据类型 1.数值类型 tinyint 1 小整数 smallint 2 大整数 mediumint 3 大整数 int 4 大整数 bigint 8 极大整数 如果插入 的较大较小 会自动改编为范围值 多余的数截取 float 4 double 8 decimal 默认是10 可以指定多少个整数和小数 2.字符串类型 char 0-255字节 定长字符串 varchar 0-255字节 变长字符串 tinyblob 0-255字节 不超过255个字符的二进制字符 tintex

C语言,vc编译器cl,如何支持变量不必在函数开始声明

windows,用vc编译器cl.exe,编译nginx的第三方模块,有类似这样的代码报错: static ngx_int_t ngx_http_zip_main_request_header_filter(ngx_http_request_t *r) { ngx_http_variable_value_t  *vv; ngx_http_zip_ctx_t         *ctx; if ((ctx = ngx_http_get_module_ctx(r, ngx_http_zip_modul