मैं इस कार्य का उपयोग प्रत्येक सीएसवी मान के लिए सही ढंग से पास करने के लिए करता हूं। यह केवल एक मान उद्धृत करता है यदि इसमें नई रेखा प्रतीकों, डबल कोट्स या विभाजक शामिल हैं। असल में, बचने का एकमात्र मूल्य डबल कोट्स प्रतीक है। अन्य सभी सेल सामग्री इसमें शामिल हो जाती है और एक्सेल में सही तरीके से प्रदर्शित होती है।
विंडोज के तहत सिरिलिक लोकेल में एक्सेल और ओडीबीसी सीएसवी पार्सर्स के विभिन्न संस्करणों के साथ जांच की गई।
/**
* This function escapes single CSV value if it contains new line symbols, quotes or separator symbol and encodes it into specified $encoding.
*
* @param string $source - origin string
* @param string $sep - CSV separator
* @param string $source_encoding - origin string encoding
* @param string $encoding - destination encoding
*
* @return string - escaped string, ready to be added to CSV
*
* @example echo escapeStringCSV("Hello\r\n\"World\"!");
* will output
* "Hello
* ""World""!"
*/
function escapeStringCSV($source, $sep=';', $source_encoding='utf-8', $encoding="windows-1251//TRANSLIT"){
$str = ($source_encoding!=$encoding ? iconv($source_encoding, $encoding, $source) : $source);
if(preg_match('/[\r\n"'.preg_quote($sep, '/').']/', $str)){
return '"'.str_replace('"', '""', $str).'"';
} else
return $str;
}
तो उपयोग इस तरह हो सकता है:
while($row = mysql_fetch_assoc($res)){
foreach($row as $val){
$csv .= escapeStringCSV($val).';';
}
$csv .= "\r\n";
}
स्रोत
2016-02-26 09:48:12