php如何分割中文字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php如何分割中文字符串相关的知识,希望对你有一定的参考价值。

例:【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里

php使用正则或者其他方式分割成数组这样
暑促特价包邮 SAMSUNG 三星 Galaxy S4 GT-i9500 盖世4 行货 沙发上 家里

因为是中文字符,还有特殊字符,所以本人不懂如何解决,求教~

  php分割中文字符串,如果直接用PHP函数“str_split”来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的。

  所以,可以建立新的函数先把字符转成ASCII值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数组,最后再用PHP函数“join”在字符间插入百分号。

  具体参考代码如下:

<?php
function str_split_utf8($str)
 $split=1;
 $array=array();
 for($i=0;$i<strlen($str))
  $value=ord($str[$i]);
  if($value>127)
   if($value>=192&&$value<=223) $split=2;
   elseif($value>=224 && $value<=239) $split=3;
   elseif($value>=240 && $value<=247) $split=4;
  else
   $split=1;
  
  $key=NULL;
  for($j=0;$j<$split;$j++,$i++)
   $key.=$str[$i];
  
  array_push($array,$key);
 
 return $array;

$string="百度知道www.baidu.cn";
$arr1=str_split_utf8($string);
echo join("%",$arr1);
?>
参考技术A 在你的方法上改了一下就是把他封装成了一个函数方便使用代码如下:

function strReplace($a,$b,$c)
$arr = str_replace($a,$b,$c);
$arr = trim($arr);
$arr = explode($b, $arr);
foreach ($arr as $key => $value)
echo "$value";


strReplace(array('【', '】', '(',')','/',' ', '(', ')','+')," ","【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里");
已经告诉你啦,好用请给满分追问

额。。。有没有更好的解决方案,你的这个等于没说,我自己都搞定了。
我希望功能的实现,最好使用正则,或者更通用的手段,这里的特殊字符,包括'【', '】', '(','),但不限于这些,当字符串更复杂时,特殊字符更多时,又能够如何解决。谢谢!

参考技术B <?php
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;


header('Content-type:text/html;charset=utf-8');
$str = '【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里';
$r = mbStrSplit($str, 4);
echo '<pre>';
print_r($r);
echo '</pre>';
?>追问

结果不对,我用
$str = '【暑促特价包邮】4 行货 (家里';

$a = array('【', '】', '(',')','/',' ', '(', ')');
$arr = str_replace($a, ' ', $str);
$arr = trim($arr);
$arr = explode(' ', $arr);
print_r($arr);
但是感觉不是很好,所以希望能够有更好的解决方案。

本回答被提问者采纳

以上是关于php如何分割中文字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中以 2 个或多个连续空格分割字符串

将中文字符串分割为数组 解决str_split中文乱码php

将中文字符串分割为数组 解决str_split中文乱码php

php如何平均分割字符串 例分割为四部分

PHP:用逗号分割字符串,但不是在大括号或引号之间?

php 将一个字符串分割为组成它的字符