3

I have to use the explode() function on Japanese text but it doesn't work.

Here is an example of what I have

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

That prints

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

in place of

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

It seems that explode() can't recognize the spaces inside that text.

What's the reason? How could I make it work?

4

5 回答 5

4

你使用了错误的空间。文本使用全角空格 (U+3000 IDEOGRAPHIC SPACE),而您提供的是半角空格 (U+0020 SPACE)。

于 2013-07-03T08:55:01.693 回答
3

这里有两个问题。

首先,你没有说你的编码是什么,但我想所有的日语编码都是多字节的。另一方面,该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));
于 2013-07-03T09:09:15.340 回答
0

That is for the simple reason that you do not have a space character here. You have an "IDEOGRAPHIC SPACE" character with the hex code "e3 80 80".

If you use that as your delimiter, it will work.

于 2013-07-03T08:57:10.970 回答
0

首先使用转换你的字符串iconv(),然后在explode上使用它。转换为 utf8

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

除了简单的 ASCII 空格之外,还有许多字符可以在字符之间添加空格。

您可以尝试使用 preg_split 使用 \s(空白字符)或 \b(单词边界)作为模式,但这可能并不理想,因为日语几乎肯定会以多字节格式编码。

于 2013-07-03T08:54:33.227 回答