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

m.yoshida php-users@php.gr.jp
Fri, 26 Oct 2001 16:44:05 +0900


こんにちは、PHP初心者の吉田です。

PHPにて改行コード変換をしたことはないのですが
(ほんっとに初心者のため)
違う言語、例えばPerlなどで正規表現を使って
改行を変換する時は

$xxx = s/(\r|\r\n|\n)/\\n/ig;
もしくは
OSに準拠する形で改行コードを書きたいのであれば
$xxx = s/(\r|\r\n|\n)/\\$1/ig;
で行けると思いますのでこれを
PHPに応用して

mbregexモジュールを利用して、

$off_str = mbereg_replace(, "(\r|\r\n|\n)","\n",$str,"i");

で出来ませんかね?
外していたらすいません。

> 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に投げるなというレスが聞こえてきそうです。
>