PHP正确拆分中文字符串的方法

网络整理 - 08-16
下面是一个网友的问题:我有一个由英文字母、数字、中文字符组成的字符串,我想要往这个字符串的每两个字符中间加入一个百分号“%”,例如:把“中国站长天空”变成“中%国%站%长%天%空%w%w%w%.%z%z%s%k%y%.%c%n”。

  如果直接用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="中国站长天空";
$arr1=str_split_utf8($string);
echo join("%",$arr1);
?>