【问题标题】:str_getcsv that does not remove the enclosure characterstr_getcsv 不删除附件字符
【发布时间】:2017-09-11 13:38:26
【问题描述】:

我想将一个以逗号分隔的字符串拆分成一个数组。 str_getcsv 似乎是一个不错的选择,但如果它位于值的开头和结尾,它会删除封闭字符 (")。我想保留附件字符。考虑字符串$str = 'foo,"bar","qwe,rty"'str_getcsv($str)返回

['foo', 'bar', 'qwe,rty']

我想要

['foo', '"bar"', '"qwe,rty"']

我怎样才能做到这一点?

【问题讨论】:

  • 如果您想在 CSV 中表达值 "bar",那么您需要将终止符适当地转义为 ""bar""(或者可能是 "\"bar\"",具体取决于您正在使用的 CSV 方言)和)。您看到的是 CSV 解析器的正确行为。 CSV 中的...,"bar",... 表示..., bar, ...
  • 谢谢@deceze。实际上,我没有使用 CSV。我只想拆分一串逗号分隔值,str_getcsv 似乎是一个不错的解决方案。
  • 如果它不是现有的标准化格式,您可能必须为此编写自己的解析器。

标签: php split


【解决方案1】:

试试这个

$str = 'foo,"bar","qwe,rty"'
$res = preg_split('/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/', $str,-1,PREG_SPLIT_DELIM_CAPTURE);

【讨论】:

  • 谢谢。不错的尝试!但是,不幸的是,当值包含转义引号时,它会失败,例如"foo,\"bar"
猜你喜欢
  • 2011-09-28
  • 2020-02-27
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
相关资源
最近更新 更多