替换包含空格作为分隔符的 csv 格式字符串中的分隔符

问题描述 投票:0回答:3

如何添加斜杠或;在每个字符串之后。

这就是我所拥有的

"SKU" "TITLE" "LINK" "LINK2" "PRICE" "World of Warcraft"

但我也会有这样的

"SKU";"TITLE";"LINK";"LINK2";"PRICE";"World of Warcraft"

我该怎么做这个?我的数据源不受我的控制——它来自外部 .txt 文件。

如何更改分隔符? 我已经尝试在每第二个

;
之后添加
"
,但这不适用于我的代码。我也尝试过
str_replace()

str_replace(" ", ";", $item);
php string csv delimiter
3个回答
0
投票

使用

preg_replace
函数的解决方案:

$str = '"61926182767182" "DAS GEILE GAME" "HTTP://google.com/123129182691239" "HTTP://google.com/123129182691239" "32.59"';
$str = preg_replace("/(\"[^\"]+\")\s/", "$1;", $str);

print_r($str);  // '"61926182767182";"DAS GEILE GAME";"HTTP://google.com/123129182691239";"HTTP://google.com/123129182691239";"32.59"'

(如果输入字符串中有制表符而不是空格,或者单词之间可能有多个空格,则可以轻松扩展此方法。它更灵活)


0
投票

您可以使用

" "
explode()
分隔符分割字符串,并使用
";"
 将结果数组与 
implode()

字符串连接起来
$str = implode('";"', explode('" "', $str))

查看演示中的结果


0
投票

要正确解析空格分隔和双引号值,请使用合法的 csv 解析工具 - 这也将处理转义的双引号。

str_getcsv($item, ' ')

你用这个数组做什么是未知的。

如果由于某种原因您确实需要将数据恢复为带有分号引号的原始 csv 形式,您可以临时流式传输并捕获

fputcsv()
输出,但请注意,双引号换行仅在必要时应用。 演示

$h = fopen('php://memory', 'r+');
fputcsv($h, str_getcsv($item, ' '), ';', '"');
rewind($h);
echo stream_get_contents($h);

输出:

61926182767182;"DAS GEILE GAME";HTTP://google.com/123129182691239;HTTP://google.com/123129182691239;32.59
© www.soinside.com 2019 - 2024. All rights reserved.