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的说法:
他提供了以下功能来解决这个限制: 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;
}
看起来它会成功. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
