看起来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解释这个不同以及什么是强大的解决方法?
答案 0 :(得分: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;
}
}
请注意,这是一个取决于特定输入的功能。在这种情况下,\"
可能只出现一列,因此它仅对该特定列进行替换。希望这对某人有用。