mb_split解析函数不能使用日文字符UTF-8文本?

时间:2012-02-22 23:07:55

标签: php unicode utf-8 string-parsing

我正在尝试解析通过multipart/form-data表单上传的utf-8编码文本文件。我已经构建了一个小.txt文件,我在拉丁文和日文字符中输入了一些制表符分隔(无意义)的文本(我从Jpz零售网站复制/粘贴了Jpz字符)。

此时我正在尝试的是(LINE)替换新行和(TAB)替换标签。这是我的代码:

...
$text=file_get_contents($_FILES['upload']['tmp_name']);

$LineArray=array('\r\n','\n\r','\r','\n');
foreach ($LineArray as $value){
  $pieces=(mb_split($value,$text));
  $text=implode ("(LINE)",$pieces);
}
echo "Here is the modified text:<br/>";
echo $text;
echo "<br/>";
var_dump($text);

$tab='\t';
$pieces=(mb_split($tab,$text));
$text=implode ("(TAB)",$pieces);
echo "Here is the modified text:<br/>";
echo $text;
echo "<br/>";
var_dump($text);
...

以下是修改前文本的vardump:

string 'John    Fitzgerald  Kennedy

Winston     Churchill

John    Edgar   Hoover

素材の 生地を柿渋で染 めた和柄パンツです





火车票 火车票 火车票 火车票



' (length=175)

第一行亚洲字符有2个标签,文件的最后一行有3个标签。

以下是所有修改后文本的vardump:

string 'John(TAB)Fitzgerald(TAB)Kennedy(LINE)Winston(TAB)(TAB)Churchill(LINE)John(TAB)Edgar(TAB)Hoover(LINE)素材の 生地を柿渋で染(TAB)めた和柄パンツです(LINE)(LINE)(LINE)火车票  火车票 火车票 火车票(LINE)(LINE)' (length=235)

为什么我的代码只能识别日文文本部分中的一个标签?

1 个答案:

答案 0 :(得分:3)

mb_split使用mb_regex_encoding的值来确定处理字符串的编码。此值可能未设置为UTF-8,因此mb_split不期望/处理正确的编码。尝试将mb_regex_encoding设置为UTF-8。