ユーザーがオンザフライで作成されたcsvをダウンロードできるようにする必要があるプラグインを作成しています(サーバースペースを使い果たしたくありません)。csv に出力する必要があるテキストをフォームの隠し要素にピン留めし、それをエコーして fopen と fclose を使用して csv を作成します。問題は、新しい行が解析されていないことです。スラッシュを追加し、変数を二重引用符で閉じ、出力バッファリングを試みました。また、auto_detect_line_endings を true に設定しました。これが私のコードです。
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="sample.csv"');
$fp = fopen('php://output', 'w');
$data = $_POST['csv_holder'];
echo $data;
fclose($fp);
そしてhtml:
<form id = 'wcds_$post_id_csv_download' action ='$download_file' method='post'><input type ='hidden' name = 'csv_holder' id ='wcds_download_csv_$post_id_value' value ='$wcds_item_details_string'><input type ='submit' id ='wcds_download_csv_$post_id' class ='wcds_download_button'</form>
例$wcds_item_details_string
:1,2,3\r\n4,5,6\r\n7,8,9
$wcds_item_details_string = get_the_content();
//sanitise for html
$wcds_item_details_string = htmlspecialchars ( $wcds_item_details_string, ENT_QUOTES );
文字列置換を試みました:
$replace = '\';
$backslash = '\\';
$wcds_item_details_string = str_replace( $backslash, $replace, $wcds_item_details_string );
データベースは変数を単一引用符で囲まれた文字列として返していました。改行を二重引用符に変更するには、文字列置換を使用する必要がありました。最終的なコード:
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="sample.csv"');
$fp = fopen('php://output', 'w');
$data = $_POST['csv_holder'];
$data= str_replace( '\r\n', "\r\n", $data );
echo "{$data}";
fclose($fp);
それが誰かを助けることを願っています!