您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

支持中文字符串分割的php解决方案

2024/3/4 7:30:12发布27次查看
很多朋友用php分割中文字符串时会遇到乱码的问题,特别是utf-8的编码下,本文我们来提供一个比较好的解决方案,也是本文正在使用的。
php中str_split函数不支持中文分割,我们可以利用mb_xx函数实现
/**
 * convert a string to an array
 * @param string $str
 * @param number $split_length
 * @return multitype:string
 */
function mb_str_split($str,$split_length=1,$charset=utf-8){
  if(func_num_args()==1){
    return preg_split('/(?  }
  if($split_length  $len = mb_strlen($str, $charset);
  $arr = array();
  for($i=0;$i    $s = mb_substr($str, $i, $split_length, $charset);
    $arr[] = $s;
  }
  return $arr;
}
方法二:
function mbstrsplit ($string, $len=1) {
  $start = 0;
  $strlen = mb_strlen($string);
  while ($strlen) {
    $array[] = mb_substr($string,$start,$len,utf8);
    $string = mb_substr($string, $len, $strlen,utf8);
    $strlen = mb_strlen($string);
  }
  return $array;
}
php str_split函数分割中文字符串乱码问题
问:
// 测试分割中文
$str2=轻轻地我走了,正如我轻轻的来。;
echo 原字符串:$str2.
;
echo 1、以指定长度为5分割字符串:
;
$arr3=str_split($str2,5);
echo --\$arr3[0]的值:.$arr3[0].
;
echo --\$arr3[1]的值:.$arr3[1];
结果是:
原字符串:轻轻地我走了,正如我轻轻的来。.
1、以指定长度为5分割字符串:
--$arr3[0]的值:轻轼br/>--$arr3[1]的值:?地漯body>
乱码!!求解释,求真相!
答:
一个解决方案.
测试发现,preg_split对中文(多字节)的分隔符处理可能真的存在问题.
原因可能是正则匹配时不能正常分隔一个多字节字符(猜测).
但我实验用半角(英文)的分隔符就工作得很好.
于是
我在处理待分隔的文本前先对文本进行替换,把中文的句点和逗号都替换成英文半角的.然后再使用preg_split,暂时发现工作得不错.
以下是我的测试代码.
============
楼主不防试试,我的代码是gb2312的字串.
经测试在,字符串为utf8时,也可以正常工作.
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product