CSV解析不尊重机箱

时间:2015-08-05 15:21:46

标签: php csv

我正在使用str_getcsv来解析从Web服务器发出的一些文本。

<table class='DeploymentSummary'><tr><td>Program Name: Some Program</td></tr><tr><td>Time Zone: &emsp;&emsp;</td></tr><tr><td>Industry Type:&emsp;</td></tr><tr><td>VAR Sheet Attached:&emsp;No</td></tr></table><tr><td>Notes: </td></ tr></table>,"<table class='DeploymentSummary'><tr><td>NAME, NAME - Some University - Food Zone</td></tr><tr><td></td></ tr><tr><td>123 N College Street, </td></tr><tr><td>New York, NY 36832</td></tr><tr><td>(222) 222-3333</td></tr></table>",,,335,Welcome Letter,11,no,21722,,90,,NAME - Some University - Food Zone,NAME,,FedEx: Ground,,7,9441,1

更易读的CSV格式,其中每列都在其自己的行上:

<table class='DeploymentSummary'><tr><td>Program Name: Some Program</td></tr><tr><td>Time Zone:      &emsp;&emsp;</td></tr><tr><td>Industry Type:&emsp;</td></tr><tr><td>VAR Sheet Attached:&emsp;No</td></tr></table><tr><td>Notes: </td></ tr></table>,
"<table class='DeploymentSummary'><tr><td>NAME, NAME - Some University - Food Zone</td></tr><tr><td></td></             tr><tr><td>123 N College Street, </td></tr><tr><td>New York, NY 36832</td></tr><tr><td>(222) 222-3333</td></tr></table>",
,
,
335,
Welcome  Letter,
11,
no,
21722,
,
90,
,
NAME - Some University - Food Zone,
NAME,
,
FedEx: Ground,
,
7,
9441,
1

我正在使用$rec = str_getcsv($record);将其解析为数组,其中$record是上面粘贴的CSV文本。为了便于阅读,将该数组编码为JSON,它会生成

    [
  "<table class='DeploymentSummary'><tr><td>Program Name: Some Program<\/td><\/               tr><tr><td>Time Zone:&emsp;&emsp;<\/td><\/tr><tr><td>Industry Type:&emsp;<\/td><\/tr><tr><td>VAR Sheet Attached:&emsp;No<\/td><\/tr><\/ table><tr><td>Notes: <\/td><\/tr><\/table>",
  null,
  "",
  "",
  "335",
  "Welcome Letter",
  "11",
  "no",
  "21722",
  "",
  "90",
  "",
  "NAME - Some              University - Food Zone",
  "NAME",
  "",
  "FedEx: Ground",
  "",
  "7",
  "9441",
  "1"
]

问题是CSV的第二列。它在解析的数组中显示为null。它包含逗号,但附有"。 PHP文档声明默认机箱字符为"。我还明确地将机箱字符设置为",但这也没有帮助。

1 个答案:

答案 0 :(得分:0)

在通过周内多次出现同样的问题之后,我发现了问题。在解析它时返回null的引用字符串内部是一个隐藏的unicode字符,我误以为它是一个空格。

检查日志后,我发现<td>General Stores <96> V</td>其中<96>START OF GUARDED AREA的unicode字符。

通过使用真实空间替换看起来像空格的内容来编辑后端中提供此数据的字段。