php如何分割中文字符串 怎样将php里的汉字字符串分割成单个字符

www.zhiqu.org     时间: 2024-06-15

  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 行货 (沙发上)+++家里");
已经告诉你啦,好用请给满分

<?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>';
?>

php "str_split"函数分割中文字符串乱码问题……~

一个解决方案.
测试发现,preg_split对中文(多字节)的分隔符处理可能真的存在问题.
原因可能是正则匹配时不能正常分隔一个多字节字符(猜测).
但我实验用半角(英文)的分隔符就工作得很好.
于是
我在处理待分隔的文本前先对文本进行替换,把中文的句点和逗号都替换成英文半角的.然后再使用preg_split,暂时发现工作得不错.
以下是我的测试代码.
<?php
$test = <<<EOF
记者从有关人士处获悉,嫦娥二号发射的各项准备工作全部就绪,昨日经专家组评审,卫星、火箭、发射场、测控等系统均情况正常,具备发射条件。今天起,西昌卫星发射中心的加注手将为火箭加注燃料。


据一位航天专家介绍,因为地球和月球都在转动的缘故,所以地月之间的最佳交汇点每年仅出现3次,而这3次便是发射探月卫星的最佳节点,经过观测,今年3次的出现时间分别为10月1日、10月2日和10月3日,而最佳发射窗口则是1日晚7时,2日晚8时和3日晚10时,其中国庆日晚7时为佳中之佳。


针对媒体称10月1日发射窗口时间为晚6时59分57秒,该专家告诉本报记者,早3秒并非提前3秒发射,而是将这3秒时间预留出来,作为现场指挥员在发送倒计时口令的缓冲时间。(记者万强)

EOF;

//$input = $_POST[$content]; //........................获取要分割的字符串
$test = str_replace(",",',',$test);
$test = str_replace("。",'.',$test);
$mode="/[,|.]/s"; //......................用“逗号” 和 “句号” 分割字符串

$output = preg_split($mode,$test,-1);

print_r($output);
?>
============
楼主不防试试,我的代码是gb2312的字串.
经测试在,字符串为UTF8时,也可以正常工作.

如果你的字串是固定的,就先用substr() 固定截图来赋值把,(汉子截取2个字节)


$str = "怎么chai数组123";

function str_arr($str){
$str1 = substr($str,0,1);
echo $str1;
$e = preg_match("/^[\x7f-\xff]+$/",$str1);
echo $e;
if($e){$zhi = "y"; }else{$zhi = 'n';}
echo $zhi;
$new = array();
if($e){
$new[] = $str1;
$str_r = substr($str,2);
}else{
$str2 = substr($str,0,2);
$new[] = $str2;
$str_r = substr($str,2);
}

return $new;
}
$ss = str_arr($str);

var_dump($ss);


#沈炎雯# 如何利用PHP来截取一段中文字符串而不出现乱码 -
(13553484582): /* 功能:截取全角和半角混合的字符串以避免乱码 参数: $str_cut 需要截断的字符串 $length 允许字符串显示的最大长度*/ function substr_cut($str_cut,$length = 30){ if (strlen($str_cut) >; $length){ for($i=0; $i if (ord($str_cut[$i]) >; 128) $i++; $str_...

#沈炎雯# php怎样拆分把包含字母汉字的字符串拆分成单个数组??? -
(13553484582): 说一下:这段不成功.如果你的字串是固定的,就先用substr() 固定截图来赋值把,(汉子截取2个字节)$str = "怎么chai数组123"; function str_arr($str){ $str1 = substr($str,0,1); echo $str1; $e = preg_match("/^[\x7f-\xff]+$/",$str1); echo $e; ...

#沈炎雯# PHP中 如何将字符串分割输出 -
(13553484582): 分割字符串 //利用 explode 函数分割字符串到数组 复制代码代码如下:$source = "hello1,hello2,hello3,hello4,hello5";//按逗号分离字符串 $hello = explode(',',$source); for($index=0;$index{ echo $hello[$index];echo ""; } ?> //split函数进行字符...

#沈炎雯# php如何平均分割字符串 例分割为四部分 -
(13553484582): 首先你要确认该字符串的编码 如果是gbk的编码 则一个汉字占用2个字节 如果是utf-8编码的话 则占用3个字节.$s='这是1个中英混合的abcd';$s=iconv('gbk','utf-8',$s); echo $len=strlen($s);//取得字符串长度 一个gbk汉字是占用2个字节 而utf-8是...

#沈炎雯# php分割字符串的函数是什么? -
(13553484582): 这个函数是substr例子:echo substr('abcdef123', 1, 3); // 输出bcd可以先用strpos找到这个字符的位置,然后后用这个函数分割如果你是将字符串分割成单个字符的话,就用split('abcde'),这个返回一个数组.如果你的字符串有固定的分割符,你可以用explode('|','a|b|cd|e').这个返回也是一个数组.

#沈炎雯# php 分割字符串 -
(13553484582): <?php $str = '1234'; $arr = str_split($str); print_r($arr);?>

#沈炎雯# php中如何截取中文字符串 -
(13553484582): 如果是UTF-8字符编码的,应该是每个中文字符占三个字符位,比如$a = "还好吧";substr($a, 3, 3);//输出“好”,注意$a赋值的时候要么都是中文字符(包括标点),如果有英文字符标点会影响

#沈炎雯# php截取字符串 -
(13553484582): $test = "1 , 2, 3 , 4 ,5";$str=explode(",", $test); foreach ($str as $value) echo $value."<br>";

#沈炎雯# php字符串分割问题 -
(13553484582): $str = "123,456;321,567;987,qwe"; $arr = explode(";",$str); foreach($arr as $u){ $strarr = explode(",",$u); foreach($strarr as $newstr){ echo $newstr." "; } }如果有什么不明白可以追问!

#沈炎雯# php如何截取中文字符 -
(13553484582): mb开头的是多字节字符串处理函数,可以用这些函数或者用正则处理也可