php中fgetcsv函数在php5.2.8 中的数据不完整

问题解析出来的数据不完整,有为空的字段
网上查了下说是在php5.2.8 中存在bug
解决办法是使用自定义函数

 代码如下 复制代码

function __fgetcsv(& $handle, $length = null, $d = ',', $e = '"') {
     $d = preg_quote($d);
     $e = preg_quote($e);
     $_line = "";
     $eof=false;
     while ($eof != true) {
         $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length));
         $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy);
         if ($itemcnt % 2 == 0)
             $eof = true;
     }
     $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));
     $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
     preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
     $_csv_data = $_csv_matches[1];
     for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {
         $_csv_data[$_csv_i] = preg_replace('/^' . $e . '(.*)' . $e . '$/s', '$1' , $_csv_data[$_csv_i]);
         $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
     }
     return empty ($_line) ? false : $_csv_data;
}

时间: 2024-10-23 11:12:31

php中fgetcsv函数在php5.2.8 中的数据不完整的相关文章

php 中fgetcsv函数将csv文件导入mysql数据库

在处理大批量excel数据到mysql数据库时,用php自带的fgetcsv函数先从csv文件中逐行获取数据,再配合sql语句导入数据库,如果遇到了乱码问题,可以使用iconv函数进行转码. 代码示例:  代码如下 复制代码 <?php $row = 1; $handle = fopen("test.csv","r"); while ($data = fgetcsv($handle, 1000, ",")) {//1000为csv文件总行数

php中fgetcsv()函数用法实例_php技巧

本文实例讲述了php中fgetcsv()函数用法.分享给大家供大家参考.具体方法如下: fgetcsv是一个简单的生成excel文档的函数,从 PHP 4.3.5 起,fgetcsv() 的操作是二进制安全的,实例代码如下: 复制代码 代码如下: <?php $file = fopen("contacts.csv","r"); print_r(fgetcsv($file)); fclose($file); ?> 希望本文所述对大家的PHP程序设计有所帮助

对象-java中compareTo函数可以在同一个类中重写多次吗?

问题描述 java中compareTo函数可以在同一个类中重写多次吗? 我有一个对象数组,想按照不同属性对这个数组进行排序.但是如果重写compareTo函数的话好像只能按照某一个属性进行排序.现在我既想按照年龄又想按照分数排序,那应该怎么写呢? 解决方案 不行,一个Comparable对应一种顺序标准,你这样按年龄又按分数,明显是两个定制顺序,结果自然是两种.建议要么合成一个逻辑:要么用两个集合来存放.

c#如何调用一个网页中的函数使其在vs2010中调试

问题描述 考虑到浏览器兼容问题,要用webkitbrowser来调用.这是我vs2010下的一个窗体程序,我首先用webkitbrowser调用了网页中的用户名和密码,我故意设置一个错误的密码来调试,结果本来应该在第一个截图的窗体中出来警告对话框,却在第二个截图中出现了,第二个截图其实是浏览器网页上的,我的问题就是如何调用网页中的登录函数到vs中,进行修改,让警告的窗口出现在我vs中制作的窗体中,也就是第一个截图中.在解释一遍,第二个截图是网页,第一个截图是vs中的窗体程序,怎么把第二个截图中的

php中fgetcsv()函数用法

 代码如下 复制代码 <?php $file = fopen("contacts.csv","r"); print_r(fgetcsv($file)); fclose($file); ?>

MySql中GROUP_CONCAT函数把多条数据显示成一条数据

有这样一个需求 1:班级表 id class_name 2:学生表 id name class_id   如果我们要查所有的班级以及每个班级下的学生,你一定会想到这样写法:  代码如下 复制代码 SELECT banji.*, user.name FROM `banji` left join user on banji.id=user.`class` where banji.id=2 这样我们得到的结果的个数是和学生人数相同的,而我希望得到的就是一条数据,而这条数据中还要包含所有学生,可以这样写

php中filter函数验证、过滤用户输入的数据_php技巧

PHP Filter 简介 PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤. 复制代码 代码如下: //除去html标签,或除去编码特殊字符 var_dump(filter_var("<html>中文ABC@#</html><script>abc</script><b>BBB</b><span>",FILTER_SANITIZE_STRING)); //url_encoded编码

【菜鸟请教】jsp如何调用到servlet中的函数

问题描述 首先说一下,我刚学习,问题可能很菜,请大家帮忙!之间接触过javabean的东西,jsp页面中可以调用java文件中的函数,比如,bean.java中可以写一个geturl的函数,bean.jsp中可以通过<iframesrc=<%=geturl()%>>,来实现对于iframe的设定.现在,我学习使用jsp.servlet来实现上述需求,在servlet.java文件中写了一个geturl函数,在jsp中编写<iframesrc=<%=geturl()%&g

设置-如何在.Cpp程序中调用.c程序中的函数?

问题描述 如何在.Cpp程序中调用.c程序中的函数? 我在软件中需要把mp3文件转换成wav文件.为此从网上下载了一个转换程序.但把这些转换程序的文件加入到我的用VC6.0编写的MFC工程中后却发现编译通不过.为此,我把Project Settings中这些文件对应的Precompiled Headers都设置成Not using precompiled headers.这样,编译能通过了.但连接却通不过.我的具体程序和现象如下: 我在我的一个.cpp文件中需要调用如下函数: BOOL mp3T