php如何分割中文字符串
例:【暑促特价包邮】SAMSUNG/三星GalaxyS4GT-i9500盖世4行货(沙发上)+++家里php使用正则或者其他方式分割成数组这样暑促特价包邮SAMSUNG三...
例:【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里
php使用正则或者其他方式分割成数组这样
暑促特价包邮 SAMSUNG 三星 Galaxy S4 GT-i9500 盖世4 行货 沙发上 家里
因为是中文字符,还有特殊字符,所以本人不懂如何解决,求教~ 展开
php使用正则或者其他方式分割成数组这样
暑促特价包邮 SAMSUNG 三星 Galaxy S4 GT-i9500 盖世4 行货 沙发上 家里
因为是中文字符,还有特殊字符,所以本人不懂如何解决,求教~ 展开
3个回答
展开全部
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);
?>
展开全部
在你的方法上改了一下就是把他封装成了一个函数方便使用代码如下:
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 行货 (沙发上)+++家里");
已经告诉你啦,好用请给满分
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>';
?>
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);
但是感觉不是很好,所以希望能够有更好的解决方案。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询