php如何分割中文字符串

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

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

因为是中文字符,还有特殊字符,所以本人不懂如何解决,求教~
展开
 我来答
一骑当后
推荐于2016-05-20 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306442
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部

  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);
?>
神鸢鹤戾
2013-08-08 · 超过29用户采纳过TA的回答
知道答主
回答量:174
采纳率:0%
帮助的人:92.1万
展开全部
在你的方法上改了一下就是把他封装成了一个函数方便使用代码如下:

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 行货 (沙发上)+++家里");
已经告诉你啦,好用请给满分
追问
额。。。有没有更好的解决方案,你的这个等于没说,我自己都搞定了。
我希望功能的实现,最好使用正则,或者更通用的手段,这里的特殊字符,包括'【', '】', '(','),但不限于这些,当字符串更复杂时,特殊字符更多时,又能够如何解决。谢谢!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2016-03-23
展开全部
<?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);
但是感觉不是很好,所以希望能够有更好的解决方案。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式