支援中文字串分割的php解決方案

來源:互聯網
上載者:User

php中str_split函數不支援中文分割,我們可以利用mb_xx函數實現

/**
 * Convert a string to an array
 * @param string $str
 * @param number $split_length
 * @return multitype:string
 */
function mb_str_split($str,$split_length=1,$charset="UTF-8"){
  if(func_num_args()==1){
    return preg_split('/(?<!^)(?!$)/u', $str);
  }
  if($split_length<1)return false;
  $len = mb_strlen($str, $charset);
  $arr = array();
  for($i=0;$i<$len;$i+=$split_length){
    $s = mb_substr($str, $i, $split_length, $charset);
    $arr[] = $s;
  }
  return $arr;
}

方法二:

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;
}





php "str_split"函數分割中文字串亂碼問題

問:

// 測試分割中文
$str2="輕輕地我走了,正如我輕輕的來。";
echo "原字串:<b>$str2.</b><br/>";
echo "1、以指定長度為5分割字串:<br/>";
$arr3=str_split($str2,5);
echo "--\$arr3[0]的值:"."$arr3[0]"."<br/>";
echo "--\$arr3[1]的值:"."$arr3[1]";

結果是:
原字串:輕輕地我走了,正如我輕輕的來。.
1、以指定長度為5分割字串:
--$arr3[0]的值:輕軾br/>--$arr3[1]的值:?地漯body>
亂碼!!求解釋,求真相!

答:

一個解決方案.
測試發現,preg_split對中文(多位元組)的分隔字元處理可能真的存在問題.
原因可能是正則匹配時不能正常分隔一個多位元組字元(猜測).
但我實驗用半形(英文)的分隔字元就工作得很好.
於是
我在處理待分隔的文本前先對文本進行替換,把中文的句點和逗號都替換成英文半形的.然後再使用preg_split,暫時發現工作得不錯.
以下是我的測試代碼.
<?php
$test = <<<EOF
記者從有關人士處獲悉,ECS Operations and Maintenance System二號發射的各項準備工作全部就緒,昨日經專家組評審,衛星、火箭、發射場、測控等系統均情況正常,具備發射條件。今天起,西昌衛星發射中心的加註手將為火箭加註燃料。

據一位航天專家介紹,因為地球和月球都在轉動的緣故,所以地月之間的最佳交匯點每年僅出現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);
?>
============
樓主不防試試,My Code是gb2312的字串.
經測試在,字串為UTF8時,也可以正常工作.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.