From 61bec735551f4793c3fee66a1ae61b8c1666c1f6 Mon Sep 17 00:00:00 2001 From: Arnaud Hours Date: Thu, 5 Feb 2026 16:22:51 +0100 Subject: [PATCH] fix(export): use built in fputcsv function to export csv rows --- includes/class-lengow-feed.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/includes/class-lengow-feed.php b/includes/class-lengow-feed.php index 63c5bae2..24e1986f 100755 --- a/includes/class-lengow-feed.php +++ b/includes/class-lengow-feed.php @@ -202,13 +202,18 @@ private function get_header( $data ) { switch ( $this->format ) { case self::FORMAT_CSV: default: - $header = ''; + $formatted_data = array(); foreach ( $data as $field ) { - $header .= self::PROTECTION . self::format_fields( $field, self::FORMAT_CSV, $this->legacy ) - . self::PROTECTION . self::CSV_SEPARATOR; + $formatted_data[] = self::format_fields( $field, self::FORMAT_CSV, $this->legacy ); } - return rtrim( $header, self::CSV_SEPARATOR ) . self::EOL; + $handle = fopen( 'php://memory', 'r+' ); + fputcsv( $handle, $formatted_data, self::CSV_SEPARATOR, self::PROTECTION ); + rewind( $handle ); + $header = stream_get_contents( $handle ); + fclose( $handle ); + + return rtrim( $header ) . self::EOL; case self::FORMAT_XML: return '' . self::EOL . '' . self::EOL; @@ -232,12 +237,13 @@ private function get_body( $data, $is_first, $max_character ) { switch ( $this->format ) { case self::FORMAT_CSV: default: - $content = ''; - foreach ( $data as $value ) { - $content .= self::PROTECTION . $value . self::PROTECTION . self::CSV_SEPARATOR; - } + $handle = fopen( 'php://memory', 'r+' ); + fputcsv( $handle, $data, self::CSV_SEPARATOR, self::PROTECTION ); + rewind( $handle ); + $content = stream_get_contents( $handle ); + fclose( $handle ); - return rtrim( $content, self::CSV_SEPARATOR ) . self::EOL; + return rtrim( $content ) . self::EOL; case self::FORMAT_XML: $content = ''; foreach ( $data as $field => $value ) {