我在PHP中处理字符串时遇到了一些问题。
想象一下包含以下字段的CSV文件:
ItemID;ItemText;ItemVAT;ItemEAN;
显然,此字符串中的分隔符为&#34 ;;"。问题是,来自" ItemText" 可能也包含&#34 ;;&#34 ;.
我需要过滤这些字符串并替换包含的&#34 ;;"与其他东西,如"#"或" $",无所谓。我试过计算&#34 ;;"与substr_count
一起确定我是否额外的&#34 ;;" (与#34;普通"值字符串的计数相比较)。但我不知道如何找到实际的&#34 ;;"在价值中。为了使事情更难,可以有不止一个&#34 ;;"在值字符串中。
任何人都有一些想法如何过滤这些不必要的&#34 ;;"?
答案 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