我必须在日文文本上使用explode()函数,但它不起作用。
以下是我所拥有的一个例子
$string = '私 は イタリア 人 です';
$string = explode(" ", $string);
print_r($string);
打印
Array ( [0] => 私 は イタリア 人 です )
取代
Array ( [0] => 私 [1] => は [2] => イタリア [3] => 人 [4] => です )
似乎explode()
无法识别该文本中的空格。
是什么原因?我怎么能让它发挥作用?
答案 0 :(得分:4)
你使用的是错误的空间。该文本使用全宽空格(U + 3000 IDEOGRAPHIC SPACE),并且您提供半宽空间(U + 0020 SPACE)。
答案 1 :(得分:1)
这里有两个问题。
首先,你没有说你的编码是什么,但我想所有的日文编码都是多字节的。另一方面,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));
答案 2 :(得分:0)
首先使用iconv()
转换字符串,然后在爆炸时使用它。转换为utf8
$string = explode(" ", iconv('', 'utf-8', $string));
答案 3 :(得分:0)
除了简单的ASCII空间之外,还有许多字符可以在字符之间添加空格。
您可以尝试使用pres_split使用\ s(空格字符)或\ b(字边界)作为模式,但这可能不太理想,因为日语几乎肯定会以多字节格式编码。
答案 4 :(得分:0)
原因很简单,就是你这里没有空格字符。 你有一个“IDEOGRAPHIC SPACE”字符,其十六进制代码为“e3 80 80”。
如果您使用它作为分隔符,它将起作用。