explode () на японской струне

Я должен использовать функцию explode () в японском тексте, но это не работает.

Вот пример того, что у меня есть

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

Это печатает

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

на месте

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

Кажется, что explode() не может распознать пробелы внутри этого текста.

В чем причина? Как я могу заставить его работать?

Это по той простой причине, что здесь у вас нет космического символа. У вас есть символ «IDEOGRAPHIC SPACE» с шестнадцатеричным кодом «e3 80 80».

Если вы используете это как ваш разделитель, он будет работать.

Вы используете неправильное пространство. В тексте используются пробелы полной ширины (U + 3000 IDEOGRAPHIC SPACE), и вы предоставляете пространство полуширины (U + 0020 SPACE).

Здесь есть два вопроса.

Прежде всего, вы не говорите, что такое ваша кодировка, но я полагаю, что все японские кодировки являются многобайтовыми. С другой стороны, функция explode() (как и все обычные функции PHP) ожидает однобайтового ввода. Точного многобайтового эквивалента нет, но 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)); 

сначала конвертируйте свою строку с помощью iconv() а затем используйте ее при взорвании. Преобразовать в utf8

 $string = explode(" ", iconv('', 'utf-8', $string)); 

Существует несколько символов, отличных от простого пространства ASCII, которое может добавлять пробелы между символами.

Вы можете попробовать использовать preg_split, используя \ s (символы пробелов) или \ b (границы слов) в качестве шаблона, однако это может быть не идеальным, поскольку японский язык почти наверняка будет кодироваться в многобайтовом формате.