加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – 如何解析包含数据中的换行符的Excel数据?

发布时间:2020-05-31 00:55:28 所属栏目:PHP 来源:互联网
导读:我正在尝试使用 PHP解析一组CSV数据,但存在一个主要问题.其中一个字段是长描述字段,其本身包含机箱内的换行符. 我的主要问题是编写一段可以逐行拆分数据的代码,但也可以识别不应该使用数据中的换行符.此字段中的换行符未正确转义,因此很难与合法的换行符区分

我正在尝试使用 PHP解析一组CSV数据,但存在一个主要问题.其中一个字段是长描述字段,其本身包含机箱内的换行符.

我的主要问题是编写一段可以逐行拆分数据的代码,但也可以识别不应该使用数据中的换行符.此字段中的换行符未正确转义,因此很难与合法的换行符区分开来.

我试图想出一个能够正确处理它的正则表达式,但到目前为止还没有运气.有任何想法吗?

CSV格式:

"####","text data here","text data n with linebreaks n here"n
"####","more text data","more data n with n linebreaks n here"n
根据PHP fgetcsv功能文档中的评论者aleske的说法:

The PHP’s CSV handling stuff is non-standard and contradicts with RFC4180,thus fgetcsv() cannot properly deal with files [that contain line breaks] …

他提供了以下功能来解决这个限制:

function csvstring_to_array(&$string,$CSV_SEPARATOR = ';',$CSV_ENCLOSURE = '"',$CSV_LINEBREAK = "n") { 
  $o = array(); 

  $cnt = strlen($string); 
  $esc = false; 
  $escesc = false; 
  $num = 0; 
  $i = 0; 
  while ($i < $cnt) { 
$s = $string[$i]; 

if ($s == $CSV_LINEBREAK) { 
  if ($esc) { 
    $o[$num] .= $s; 
  } else { 
    $i++; 
    break; 
  } 
} elseif ($s == $CSV_SEPARATOR) { 
  if ($esc) { 
    $o[$num] .= $s; 
  } else { 
    $num++; 
    $esc = false; 
    $escesc = false; 
  } 
} elseif ($s == $CSV_ENCLOSURE) { 
  if ($escesc) { 
    $o[$num] .= $CSV_ENCLOSURE; 
    $escesc = false; 
  } 

  if ($esc) { 
    $esc = false; 
    $escesc = true; 
  } else { 
    $esc = true; 
    $escesc = false; 
  } 
} else { 
  if ($escesc) { 
    $o[$num] .= $CSV_ENCLOSURE; 
    $escesc = false; 
  } 

  $o[$num] .= $s; 
} 

$i++; 
  } 

//  $string = substr($string,$i); 

  return $o; 
}

看起来它会成功.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读