替换CSV分组中的字符,该字符串与分隔符相似,但不是分隔符

时间:2014-11-16 19:26:10

标签: php string csv substr

我在PHP中处理字符串时遇到了一些问题。

想象一下包含以下字段的CSV文件:

ItemID;ItemText;ItemVAT;ItemEAN;

显然,此字符串中的分隔符为&#34 ;;"。问题是,来自" ItemText" 可能也包含&#34 ;;&#34 ;.

我需要过滤这些字符串并替换包含的&#34 ;;"与其他东西,如"#"或" $",无所谓。我试过计算&#34 ;;"与substr_count一起确定我是否额外的&#34 ;;" (与#34;普通"值字符串的计数相比较)。但我不知道如何找到实际的&#34 ;;"在价值中。为了使事情更难,可以有不止一个&#34 ;;"在值字符串中。

任何人都有一些想法如何过滤这些不必要的&#34 ;;"?

2 个答案:

答案 0 :(得分:0)

如果你总是有这个字段,你可以这样做。

$line = "34;erwffw;wefweef;fwe3242;23342;53453;";
$toArray = explode(";", $line);
$counntSemi = count($toArray);

$newLine[0] = $toArray[0]; // ItemID
$newLine[1] = ''; // ItemText
$newLine[2] = $toArray[$counntSemi-3]; // ItemVAT
$newLine[3] = $toArray[$counntSemi-2]; // ItemEAN

// ItemText filter
for($i=1; $i < ($counntSemi-3); $i++) {
    $newLine[1] .= $toArray[$i]."@"; 
}

print_r($newLine);
// here you can implode this newLine with the semicolons

答案 1 :(得分:0)

当字段包含分隔符时,应该引用它,如

valueA;"valueB;with;embedded;separators";valueC

如果是这种情况,您可以例如将每个数组项合并为以下内容,同时它包含一个奇怪的&#39;&#39;&#39;&#39;字符。

如果文件的创建者(数据的编码器)没有遵循该规则,则没有通用的方法来正确解码文件,因为编码值&#34; A&#34;和&#34; B; C&#34;会产生与编码值相同的csv文件&#34; A; B&#34;和&#34; C&#34;。在这种情况下,你只能责怪创作者或尝试根据你拥有的模式识别ItemVAT