[PHP-users 3138] Re: textareaの内容をCSV に書きたいが

php-users@php.gr.jp php-users@php.gr.jp
Fri, 26 Oct 2001 16:18:09 +0900


SUMiです。

# 山盛りレスのつきそうな予感…

> こんにちは。takaesuといいます。
> 
> #PHPというより、コーディング技術不足から来る質問かもしれません。
> 
> HTMLのTEXTAREAに入力された内容をCSVに書き込む際の問題です。
> ご存知のとおりTEXTAREAの内容には改行コードが含まれますが
> CSVは改行がレコードの区切りなので何らかの対応が必要です。
> また、クライアントにより改行コードもまちまちです。
> 
> $a = "abc\r\nxyz";	// Windows
> $a = "abc\nxyz";	// Linux
> $a = "abc\rxyz";	// Mac?
> 
> これらのデータの改行コードを表示可能な文字に置換しようと
> 考えました。すなわち、
> 	'abc\nxyz';	// シングルクォートで囲ったよ
> の様な形に変換してCSVに書き込む考えです。
> #元々のデータに '\n'という文字列が含まれているというのは無し(^^;

私ならばどんなクライアントのときでも
$a = "abc\\nxyz";
となるように変換すると思います。
後で読み込むときに変換するのも面倒なので。

> で、以下の様に安易にやってみたのですがダメでした。
> $off_str = strtr($off, "\r\n", "\\r\\n");       // 改行を見える形に
> $off_str = strtr($off_str, "\n", "\\n");        // 改行を見える形に
> $off_str = strtr($off_str, "\r", "\\r");        // 改行を見える形に

takaesuさんのやりたいようにするならば

$off_str = strtr($off, "\n", "\\n");        // 改行を見える形に
$off_str = strtr($off_str, "\r", "\\r");        // 改行を見える形に

これでよいのでは?

$off_str = strtr($off, "\r\n", "\\r\\n");       // 改行を見える形に
これもあると、2重に変換してしまうことになり、
\r\n -> \\\r\\\n
となるでしょう。

> ということは文字列を1バイトづつ見て置換して行くしかないのでしょうか?
> もっとスマートな方法があるような気がします。
> 上級者の方々、ご指導ください。
> #えっ、自分で関数作って、経験を積んで精進しろって・・・

# そう思うならMLに投げるなというレスが聞こえてきそうです。