3

日本語のテキストでexplode()関数を使用する必要がありますが、機能しません。

ここに私が持っているものの例があります

$string = '私 は イタリア 人 です';
$string = explode(" ", $string);
print_r($string);

それは印刷します

Array ( [0] => 私 は イタリア 人 です )

代わりに

Array ( [0] => 私 [1] => は [2] => イタリア [3] => 人 [4] => です )

explode()そのテキスト内のスペースを認識できないようです。

どういう理由ですか?どうすればそれを機能させることができますか?

4

5 に答える 5

4

間違ったスペースを使用しています。テキストは全角スペース (U+3000 IDEOGRAPHIC SPACE) を使用し、半角スペース (U+0020 SPACE) を提供しています。

于 2013-07-03T08:55:01.693 に答える
3

ここには 2 つの問題があります。

まず第一に、あなたのエンコーディングが何かは言われていませんが、日本語のエンコーディングはすべてマルチバイトだと思います。一方、このexplode()関数は(すべての通常の PHP 関数と同様に) 1 バイトの入力を想定しています。正確なマルチバイトに相当するものはありませんが、mb_split()でうまくいく可能性があります。

次に、通常のスペース ( U+0020 ) で爆発していますが、文字列には別の文字 ( U+3000 ) が含まれています。

要約すると(UTF-8を使用していると仮定して):

<?php

mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

$string = '私 は イタリア 人 です';
print_r(mb_split(' ', $string));

...またはさらに良い:

<?php

mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

$string = '私 は イタリア 人 です';
print_r(mb_split('[[:space:]]', $string));
于 2013-07-03T09:09:15.340 に答える
0

最初に使用して文字列を変換してiconv()から、爆発時に使用します。utf8に変換

$string = explode(" ", iconv('', 'utf-8', $string));
于 2013-07-03T08:53:46.813 に答える
0

文字間に空白を追加できる単純な ASCII スペース以外の文字がいくつかあります。

パターンとして \s (空白文字) または \b (単語境界) を使用して preg_split を試すこともできますが、日本語はほぼ確実にマルチバイト形式でエンコードされるため、これは理想的ではない可能性があります。

于 2013-07-03T08:54:33.227 に答える
0

これは、ここにスペース文字がないという単純な理由によるものです。16 進コード「e3 80 80」の「IDEOGRAPHIC SPACE」文字があります。

それを区切り文字として使用すると、機能します。

于 2013-07-03T08:57:10.970 に答える