PHP Excel(PHPExcel_IOFactory)编码问题

时间:2017-08-10 15:55:26

标签: php csv encoding utf-8

提前致谢。

我通过php 5.5脚本上传.csv文件,将其从Unicode转换为UTF-8,最后将其保存在文件夹中。

然后我用PHPExcel_IOFactory读取这个文件并将一些数据捕获到一个数组中。到现在为止还挺好。文件上传和保存确定,但有些东西可能会在转换过程中弄乱数据,因为我得到的数组中的文本字符串填充了这样的空格:

array(20) {
["A"]=>
string(39) "
 l : 1 7 0 4 8 0 8 8 8 6 4 9 2 3 5 9 "
["B"]=>
string(51) " 2 0 1 7 - 0 8 - 0 9 T 0 0 : 2 1 : 5 7 + 0 2 : 0 0 "
["C"]=>
string(41) " a g : 2 3 8 4 2 6 1 5 5 8 3 3 9 0 2 5 8 "
["D"]=>
bool(false)
["E"]=>
string(41) " a s: 2 3 8 4 2 6 1 5 5 8 3 3 7 0 2 5 8"
["F"]=>
string(29) " D E S A R R O L L O  W E B " 

也许是因为分隔符。在sublime上打开.csv会显示出两个白色的空格'作为分隔符,所以如果我传递这样的东西:

$objReader->setDelimiter('  ');

它工作并读取数据,但填充空白空间。关于如何从文件中获取干净数据的一些提示?

注意:使用WAMP可正常转换文件:

$conversion = iconv(mb_detect_encoding($conversion, mb_detect_order(), 
true), "UTF-8", $conversion);

在生产环境中完全无法使用该转换(文件保存为空)

1 个答案:

答案 0 :(得分:0)

最后解决了问题。对于任何使用PHPExcel并且在字符编码方面存在相同问题的人,如果你真的需要将.xls文件保存在不同的字符集上,请在转换时尝试这样的事情:

$objReader->setDelimiter("\t");
$inputFileName = array_shift($inputFileNames); 
$conversion = file_get_contents($inputFileName); 
$conversion = iconv("WINDOWS-1252", "UTF-8", $conversion); 

谢谢!