fputcsv()を使用して配列の配列からcsvを生成しています。フィールドの1つにhtmlコードスニペットが含まれており、Excelで開くと問題が発生します。
Excelで開くと、複数のセルにまたがって壊れます。
fputcsvでは,
、区切り文字および"
囲み要素として使用していることに注意してください。
それでも、html文字列が複数のセルにまたがって分割されていることがわかりました。これは、htmlcontent内のコンマが原因で発生していました。
では、どうすれば内在するコンマを正確にエスケープできますか?
とりあえず、コンマを空白に置き換えました。しかし、それでも、MS Excelで開くと、長いhtmlcode(約53823文字)が複数のセルにまたがって表示されます。Excelの1つのセルに含めることができる文字数に上限はありますか?
Notepad ++でcsvを開くと、CSVが途切れることなく適切に形成されていることが示されていることに注意してください。ただし、私のクライアントはMS Excelを使用しており、CSVが実際に整形式であることを彼に納得させるのは難しいです。助けてください。
これが私が使用しているコードです:
//escape the newline characters
$template = str_replace(array("\r\n", "\n", "\r", "\t"), '', $template);
$cache = str_replace(array("\r\n", "\n", "\r", "\t"), '', $cache);
$fh = fopen('abc.csv', 'a');
fputcsv($fh,array($template,$cache),',','"');
$template
およびは、$cache
フィールド値としてhtmlコードスニペットを持っています。
また、私が気付いたのは、エスケープしない,
と、文字列が複数のセルにまたがるということです。このために私は試みましstr_replace(",","\,",$string)
たが、役に立たなかった。
更新:問題は、引用符とコンマの両方が文字列内で発生する場合に発生します。たとえば、文字列を検討してくださいI have "big" quesiton, that I want to know.
"I have "big" quesiton"
"that I want to know."
文字列全体が1つの列に表示されるのではなく、1つのセルに表示され、別のセルに表示されます。