如何使PHP正确转义CSV(fgetcsv)?

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

看起来PHP在fgetcsv或str_getcsv中存在双引号和转义问题。

这是命令行中的一个简单示例:

$ echo '"\"test\""' | php -r '$t=file_get_contents("php://stdin"); print "input: ".$t."\noutput: ".str_getcsv($t)[0];'

结果:

input: "\"test\""
output: \"test\"

预期结果:

input: "\"test\""
output: "test"

我希望输出是不同的,因为外部引号括起引号,内部引号被转义。不应将转义字符传送到输出。

为什么PHP解释这个不同,什么是强大的解决方案?

php csv escaping fgetcsv
1个回答
0
投票

我用str_replace解决了这个问题。

str_replace("\\\"", '"', $string);

这是我用来修复整个解析的CSV行数组的函数。

function fixCSVescapes(&$data) {
    for ($i = 0; $i < count($data); $i++) {
        $row = $data[$i];
        $name = $row["name"];
        $fixName = str_replace("\\\"", '"', $name);
        $data[$i]["name"] = $fixName;
    }
}

请注意,这是一个取决于特定输入的功能。在这种情况下,只有一列可以出现\",因此它只对该特定列进行替换。希望这对某人有用。

© www.soinside.com 2019 - 2024. All rights reserved.