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”在字符间插入百分号。
具体参考代码如下:
<?phpfunction 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 行货 (沙发上)+++家里");
已经告诉你啦,好用请给满分追问
额。。。有没有更好的解决方案,你的这个等于没说,我自己都搞定了。
我希望功能的实现,最好使用正则,或者更通用的手段,这里的特殊字符,包括'【', '】', '(','),但不限于这些,当字符串更复杂时,特殊字符更多时,又能够如何解决。谢谢!
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如何分割中文字符串的主要内容,如果未能解决你的问题,请参考以下文章
将中文字符串分割为数组 解决str_split中文乱码php