0

中国語の文字列の例を次に示します。

"最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "

これを次のような配列に分割するにはどうすればよいですか?:

Array
(
    [0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
    [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 
)

私は試しましたが失敗しました:

$array = mb_split('。', $string);
echo "<pre>";
print_r($array);

私はこれを手に入れます:

Array
(
    [0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
)

ps文字セットはGB18030です。

私はより多くの情報を見つけました。中国の期間は終止符と呼ばれます。htmlエスケープはと&#12290;です&#x3002;。GB18030の16進バイトはa1a3です。Unicode文字は「表意文字の終止符」(U + 3002)です。これらのいずれかを使用して目標を達成するにはどうすればよいですか?

4

4 に答える 4

0

これを試して:

$array = explode(chr(227), $string);

アップデート:

の文字を修正するにはexplode

foreach($array as $part) {
    echo str_replace(array(chr(128).chr(130)), '', $part);
    echo '<br>';
}
于 2012-11-14T21:11:38.190 に答える
0

試してみてはどうですか

$ array = explode('。'、$ string);

これは、コマンドラインを使用して機能しました。

出力:配列([0] =>配列、上帝创造了天地[1] => 2大地混沌苍茫、深渊的苍茑暗[2] =>

于 2012-11-14T21:34:01.647 に答える
0

gb18030でこれを行う必要がある理由は、使用していたライブラリ(dedesplit)がutf-8に変換されたときに機能しないためです。ライブラリは中国語の単語セグメンターです。開発者に連絡したところ、utf-8(http://www.itgrass.com/phpanalysis/index.html)で動作する新しい開発者について通知されました。私はそれをテストしました、そしてそれは区切り文字として中国語のピリオド(または「終止符」)で段落を適切に爆発させます。

psこの新しいライブラリを見つける前に、私は独自のexplode関数を作成することにしました。それはうまくいったかもしれませんが、私はゼロテストを行いました。

于 2012-11-15T12:47:57.137 に答える
0

最良の方法はpreg_split()/u(UTF8)オプションを使用することです。例:

 $s = "日、に、本、ほん、語、ご";
 $v1 = preg_split('/(?<!^)(?!$)/u', $s); // for multibyte str_split($list)
 // same as $v1=preg_split('//u', $s);array_pop($v1);array_shift($v1);
 $v2 = preg_split('/、/u', $s); // for multibyte explode("、&quot;,$list)

結果は

  • v1 = array(12){[0] => string(3) "日&quot; [1] => string(3)"、&quot; [2] => string(3) "に&quot; [3] => string(3)"、&quot; ... [11] => string(3) "ご&quot;}

  • v2 = array(6){[0] => string(3) "日&quot; [1] => string(3)"に&quot; [2] => string(3) "本&quot; [3] => string(6)"ほん "[4] => string(3)"語&quot; [5] => string(3) "ご&quot;}


あなたの例で使用すると、

$s = "最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 ";
$array  = preg_split('/。/u',$s);
var_dump($array);

結果

array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 " 
           [1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 " 
           [2]=> string(1) " " 
} 

ですから、完璧ではありません...しかし、通常の表現として、あなたはそれをあなたのニーズに適応させることができます:

正確なソリューション

$array  = preg_split('/。(?!\s*$)/u',$string);

さて、を見越して、それはまさにあなたが必要としているものです(!)。

array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 " 
           [1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 " 
} 
于 2014-10-12T17:58:48.533 に答える