我不得不对日语文本使用explode()函数,但它不起作用。
下面是我所拥有的一个示例
$string = '私 は イタリア 人 です';
$string = explode(" ", $string);
print_r($string);
打印出来的
Array ( [0] => 私 は イタリア 人 です )
代替
Array ( [0] => 私 [1] => は [2] => イタリア [3] => 人 [4] => です )
看起来explode()
无法识别文本中的空格。
理由是什么呢?我怎么才能让它工作呢?
发布于 2013-07-03 16:57:11
原因很简单,这里没有空格字符。您有一个十六进制代码为"e3 80 80“的”表意空格“字符。
如果您使用它作为您的分隔符,它将工作。
发布于 2013-07-03 16:55:02
你用错地方了。文本使用全角空格(U+3000表意空格),而您提供的是半角空格(U+0020空格)。
发布于 2013-07-03 17:09:15
这里有两个问题。
首先,您没有说明您的编码是什么,但我认为所有的日语编码都是多字节的。另一方面,explode()
function (像所有常规的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));
https://stackoverflow.com/questions/17443605
复制相似问题