fgetcsv之后存在数组$arr 第一个字符user_id  然后判断 "user_id"!=$arr[0] 结果显示1 ,个人觉得是bom那块的问题,求高手如何解决这个问题?
读取其它类型文件估计也有问题

解决方案 »

  1.   

    既然你已经意识到是 BOM 的问题
    那么就跳过 BOM,再去测试
      

  2.   


    Example #1 读取并显示 CSV 文件的整个内容<?php
    $row = 1;
    $handle = fopen("test.csv","r");
    while ($data = fgetcsv($handle, 1000, ",")) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br>\n";
        }
    }
    fclose($handle);
    ?> 从 PHP 4.3.5 起,fgetcsv() 的操作是二进制安全的。 Note: 该函数对区域设置是敏感的。比如说 LANG 设为 en_US.UTF-8 的话,单字节编码的文件就会出现读取错误。 Note: 在读取在 Macintosh 电脑中或由其创建的文件时, 如果 PHP 不能正确的识别行结束符,启用运行时配置可选项 auto_detect_line_endings 也许可以解决此问题。
      

  3.   


    该函数对区域设置是敏感的。比如说 LANG 设为 en_US.UTF-8 的话,单字节编码的文件就会出现读取错误。
    就是这个问题
      

  4.   

    去掉 BOM 头
    设 $s 为可能含有 BOM 头的字符串

    $s = trim($s, "\xef\xbb\xbf\xff\xfe");
    就可以了"\xef\xbb\xbf\xff\xfe" 中
    "\xef\xbb\xbf" utf-8
    "\xff\xfe" utf-16le (低位在前)
    "\xfe\xff" utf-16be (高位在前)
    分别表示相应的 BOM 头