php如何分割中文字符串

作者&投稿:尉迟罡 (若有异议请与网页底部的电邮联系)
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分割中文字符串,如果直接用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>';
?>


hp m1522nf怎么设置字体为中文
4,使用按钮选择所需的语言,按下 Menu\/Enter (菜单 \/ 输入)保存选择。5,打印机自动重启,并恢复就绪状态,设置完成。6,在就绪状态下,使用按钮 1 次,再按下“√”按键,此时打印机会恢复到出厂设置,面板语言变为英文你也可以看看广州惠普网站m1522nf中文说明书:http:\/\/h50176.www5.hp.com\/FILE\/...

...买的可是改完语言后是中文繁体字不是简体中文怎么办?如题 谢谢了...
您好,欢迎您使用惠普产品~系统语言的更改,通常需要更换简体中文版系统重新安装才可以的,Windows系统下繁体中文无法通过直接设置的方式直接转换的~将纯净版简体中文系统安装光盘放置光驱内,开机屏幕显示compaq或hp时,单独连续点击F9按钮,选择CD-ROM、optical disk 或upgrade bay 或内建光碟机选项;在进入...

为什么HP的中文名称叫做“惠普”?
一般来说,一个品牌要进军一个国外市场,就必须将自己的名字翻译为一个符合那个国家的文化并且易于被人们接受和记忆的名字。惠普,字面上可以理解为为人们普遍能得到实惠和美好的东西,事实也说明,这很符合中国人对其产品的理解和期望。所以除了其英文全名Hewlett-Packard及HP对中文字面的声母要求外,这是一...

惠普4500打印机的控制面板显示英文怎么改成中文?
您好,感谢您选择惠普产品。按设置在按两下ok往左按到简体中文就可以了,如果以上信息没有解决您的问题,您可以通过追问或惠普技术支持聊天室在线向工程师咨询。感谢您对惠普的支持.希望以上回复能够对您有所帮助。

惠普战66打字怎么变中文
点击开始菜单-设置-时间和语言-语言-中文(语言选项)-微软拼音(键盘选项)-常规-兼容性打开

hp5200英文字,如何设置中文
如果是系统字是 英文 ,想设置成 中文 的话,去系统自带的Windows update 更新语言包 Chinese 更新之后 在控制面板--- 区域和语言 --- 键盘 和 语言选项 卡--设置成Chinese--重启计算机 即可

WPS中文字某一行间距过大怎么办?
(电脑型号:惠普 (HP) 暗影精灵8Pro,软件及版本号:WPS 11.1.0.13703) 1、打开需要处理的WPS文档。 2、选中所有段落文字后,点击鼠标右键,选择段落。 3、根据需要设置行距,选择设置值后,点击确定。 4、最后所有段落的文字间距就变成一样的了。 抢首赞 评论 分享 举报 深...

惠普1005打印机的控制面板显示英文怎么改成中文?
选项,这是“设置”选项。如图所示 3、进入dao“Menupengaturan”选项(设置菜单),点击菜单下的“P’atrnsist”选项(回系统设置)。如图所示 4、进入“P’atrnsist”(系统设置)界面,点击“Bahasa”选项(语言)。如图所示 5、进入“Bahasa”(语言)界面,点击“简体中文答”即可。如图所示 ...

打印机(惠普)打印出来的字只有上半部分
只出一半的字吗??是不是没碳粉了??要不就是把套股拿出来!!用卫生纸把鼓芯擦擦干净!!多擦几圈!!手动转旁边的齿轮。。注意:手要是碰到鼓芯的话注意处理掉,别留下作案线索!!

惠普电脑怎么切换界面
问题五:惠普电脑出现了个性设置。怎样返回主页面 按键盘的win键,即那个田字键,或者鼠标划到屏幕左下角点一下也可以 问题六:HP台式电脑怎么进入BIOS界面和重装系统设置。 HP电脑都是统一设置的,F10进入BIOS,F9打开启动菜单列表,F12网络启动。问题七:惠普笔记本如何将BIOS的英文切换成中文界面 ...

邗江区18084567686: php如何分割中文字符串 -
曲妻美素: php分割中文字符串,如果直接用PHP函数“str_split”来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的.所以,可以建立新的函数先把字符转成ASCII值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数...

邗江区18084567686: 怎么用php分割汉语字符串?
曲妻美素: <?php function fenge($str){ $arr = explode(".",$str); foreach($arr as $v){ if($v!=""){ $arr2[]=$v; } } print_r($arr2); } $str = "我是好孩子...我是好学生..哦耶"; fenge($str); ?> 这样可以吧!

邗江区18084567686: 怎么用php分割汉语字符串? -
曲妻美素: 这样当然不行了,又没有什么规律.你可以这样处理:先将字符串中的 ".." 替换为 "_" ,处理一遍之后:$string=“我是好孩子_.我是好学生_哦耶" 再将里面的一个"."给去除掉,不就是:$string=“我是好孩子_我是好学生_哦耶"...

邗江区18084567686: php分割中文字符串 -
曲妻美素: $str = ereg_replace('[\W\_]+','',$str)\W 大写W===================================噢...你要的是保留中文呀...$str = ereg_replace('[\w[:punct:]]+','',$str)

邗江区18084567686: php如何分割中文字符串 -
曲妻美素: 在你的方法上改了一下就是把他封装成了一个函数方便使用代码如下: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('【',...

邗江区18084567686: 怎样将php里的汉字字符串分割成单个字符 -
曲妻美素: for($i=0;$i echo $string{$i};if($i%9 == 8){echo "";} } 试试,应该可以用的.希望回答对你有帮助,如果有疑问,请继续追问 答题不易,互相理解,您的采纳是我前进的动力,感谢您.

邗江区18084567686: [php]如何在PHP中截取中文字串无乱码
曲妻美素: 一年前写的一个函数.用法与substr一样,支持中文.您也可以加以改进. //截取字符串含数,对系统函数的改进,不会将中文变乱. function mysubstr ($str,$start,$len=0,$cutchar="…") { $str=str_replace(" ",' ',$str); $str=str_replace("“",'...

邗江区18084567686: 如何利用PHP来截取一段中文字符串而不出现乱码 -
曲妻美素: /*功能:截取全角和半角混合的字符串以避免乱码参数: $str_cut 需要截断的字符串 $length 允许字符串显示的最大长度*/function substr_cut($str_cut,$length = 30){if (strlen($str_cut) >; $length){ for($i=0; $i < $length; $i++) if (ord($str_cut[$i]) >; 128) $i++; $str_cut = substr($str_cut,0,$i) . "..."; } return $str_cut;}

邗江区18084567686: php分割中英文字符串的几种方 -
曲妻美素: 对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而php函数strlen只能计算出字串的字节数,于是自己实现了几个函数,分享下.例1,计算字符总长度.01 02 function ccStrLen($str) #计算中英文混合字符串的长度 03 { 04 $...

邗江区18084567686: php 怎么截取汉字字符串? -
曲妻美素: $str = '这样一来我的字符串就不会有乱码^_^'; echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8'); //结果:这样一来我的字 echo ""; echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8'); //结果:这样 ?> 首先 1.确保你的Windows/system32下有...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网