当一个单元格包含Javascript代码时,无法使用fputcsv正确构建CSV

CSV not building properly with fputcsv when one cell includes Javascript code

本文关键字:fputcsv CSV 构建 一个 单元格 代码 Javascript 包含      更新时间:2023-09-26

我正试图使用fputcsv用php创建一个csv文件,其中一个单元格包含javascript代码。我遇到的问题是,保存javascript代码的单元格包含以下字符:

'|"''/,

每次我加载csv文件时都会破坏它。它将javascript代码中的逗号视为分隔符,因此将代码拆分为多个单元格。

我正在excel中查看csv文件。

我知道excel会用双引号封装字符串,例如短语:

乔说:"进展如何?"

将转换为

乔说:"怎么样?"?"

但是对于javascript代码,这种封装不起作用。

下面是一条需要进入csv:的违规javascript代码

document.body.innerHTML.toLowerCase().replace(/'s|'"|''/g, "");

上面js中的"导致了问题,g后面的逗号开始了一个新的单元格。
如果我执行str_replace(''"','', ** javascript code **);,csv将正确生成。但我不允许更改任何js,只允许转义字符

有人能为这个问题提供任何解决方案吗?也许有一种方法可以在''"上执行str_replace,将其保存在js中,但正确地转义,以便excel在单元格中查看?

非常感谢

Joe

在此处检查:

    $line=array();
    for($x=0;$x<=3;$x++)
    {
    $line[$x]="Sample data".$x;
    }
$line[4]= <<<EOT
document.body.innerHTML.toLowerCase().replace(/'s|'"|''/g, "");
EOT;
        $fp = fopen('final.csv', 'w');
            fputcsv($fp, $line);
        fclose($fp);

final.csv:的内容

"Sample data0","Sample data1","Sample data2","Sample data3","document.body.innerHTML.toLowerCase().replace(/'s|'"|''/g, """");"
                                                                                                                         ^^

使用HEREDOC,您可以将该行放入字符串中,并将其插入csv文件中。

但这不是一个解决方案,因为它在csv文件中插入了更多的引号,但可以帮助您获得真正的解决方案。

更多

echo $string."<br><br>";
$arr1 = str_split($string);
for($i=0;$i<count($arr1);$i++) {
if($arr1[$i]=='"' and $arr1[$i+1]=='|'){ $arr1[$i]='""';}  //this will only work if "| are together
}
echo implode("", $arr1);

返回:

document.body.innerHTML.toLowerCase().replace(/'s|'"|''/g, "");
document.body.innerHTML.toLowerCase().replace(/'s|'""|''/g, "");