• 締切済み

改行コード変換のタイミングについて教えてください。

改行コード変換のタイミングについて教えてください。 前提: \n: ラインフィード  \r: キャリッジリターン UNIX    \n Winodws   \r\n MAC     \r PerlスクリプトによるCGIで、ブラウザに出力します。 このとき、生成するHTMLのFORM要素.INPUT要素.VALUE属性 に変数データを代入しています。 これは、文字列になっており、当初、\nを区切り文字として使用し、 HTMLとなってからJavaScriptでこの区切り文字を頼りに配列化しました。 ところが、MAC環境の方に確認をお願いしたところ、期待通りの動作をして おらず、調べたところ、\nがすべて\rに変換されていたため、JavaScriptで \nを探しても見つからなかったということがわかりました。 Windowsも\r\nに変換されています。 この改行コードの変換がなにを基準に、どのタイミングで起きているのかがよくわかりません スクリプトの文字コードとget要求をしてきたOSを見て、Apacheが行っているのか、 それとも、ブラウザがやっているのか。 はたまた、アプリケーション層に行くまでの下層プロトコルがやっているのか。 判断基準はGETの中にあるのか、出力されたcontent-typeなのか・・・・。 変換がなに依存なのかわからないと、どんなとき変換が起き、どんなときは起こらないのかが わからないので、このあたりの仕組みの詳細に詳しい方、ご教授願えませんか。 自分でもある程度調べたのですが、環境が限定されますし、ドキュメントもhttpプロトコル を調べるべきなのか、TCP/IPなのか、HTML(のFORMリクエスト)なのか、httpデーモン なのか、httpdが動いているUNIXサーバOSなのか、それともIEやNNの仕様を調べる必要があるのか・・・ どこがやっていることなのかわからないもので。

  • sight
  • お礼率75% (3/4)
  • CGI
  • 回答数2
  • ありがとう数3

みんなの回答

  • burn
  • ベストアンサー率65% (25/38)
回答No.2

そう言う事でしたか。。 理解力不足で申し訳ありませんでした。 このコード変換は、サーバーサイドではなく、クライアントサイドで行われます。 IEやNNでの仕様と思って貰えば良いと思います。

sight
質問者

お礼

とりあえず、締め切ることとします。 実験手法や公式(に近い)情報ソースがわからなかったのは残念ですけど、クライアントサイドで行われる、とおっしゃってくださった方がいたことだけでも大収穫です。 やはり、汎用性を考えると、どこでであれ、自動的に変換解釈が行われないような方法を採った方がいいですね。 どうもありがとうございました。

sight
質問者

補足

いぇ、こちらこそ、お答えいただきありがとうございます。 再びの補足で申し訳ないのですが、 >このコード変換は、サーバーサイドではなく、クライアントサイドで行われます。 とのことですが、 この仕様についてを実際に確認できるドキュメントなどはどこかに公開されているでしょうか? また、調べるための方法&ツール(ブラウザのパーサー部が解析する前の通信状態を表示することができるブラウザなど)はないでしょうか? よろしくお願いします。>皆様

  • burn
  • ベストアンサー率65% (25/38)
回答No.1

CGIプログラムの中で、改行コード変換を行った上でのお話ですか? それとも、CGIの中で改行コードの変換ロジックを入れていないのでしょうか? <<改行コード変換ロジック>> $val =~ s/\r\n/\n/g; $val =~ s/\r/\n/g; もし、改行コードの変換をされていないのであれば、そのロジックを入れないと正しく動作されないと思います。 変換を行うタイミングは、GET 又は POSTでデータを取得した後、そのデータを変数データとして扱う処理を行うタイミングで良いと思いますが・・・・ 「こんな事は当然やった上での話だ!」と思われてしまったら、ごめんなさい。

sight
質問者

補足

ご回答ありがとうございます。説明不足で申し訳ありません。 Perlスクリプト内ではコード変換は行っておりません。 これは、FROMからくる入力データには複数行文字列はないため、当然改行もなく、 必要がないためです。 あくまでも、"出力時"にUNIXサーバ上に保存されているデータを\nを使い連結して 一つのデータとしてHTML出力し、後からJavaScriptで配列化しております。 そのため、UNIXサーバでperlスクリプトが動作して、TCP/IPプロトコルにのっかって httpでクライアントに送られ、ブラウザがそのデータを取得し、解析される までの一連の過程の中で起こっている文字コード変換の、タイミングと発生条件が 今回の質問の中心です。

関連するQ&A

  • 改行コードについて

    HTMLフォームのテキストエリアで改行した場合の処理についてご質問します。 Windowsのローカル環境で試しています。 改行コードLFでPHPを作成しています。 ○改行コードの認識 LF(\n) Unix,Mac OS X CR(\r) Mac OS 9 CRLF(\r\n) ○テキストエリアからの入力値の処理 CRLF、CRをLFに変換しています。 $value= str_replace ("\r\n", "\n", $value); $value = str_replace ("\r", "\n", $value); このあとDBに値を格納しています。 ○出力の際の処理 DBから値を取得。 phpのprint関数で下記を出力。 <textarea >${value}</textarea> 上記処理で、ローカル、サーバともに正常に動作しています。 しかし改行コードがLF(\n)なのでCRLF(\r\n)のWindowsで表示したときには問題が起きそうな気がします(実際には正常に動作)。 なにかしっくりこなくて質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 改行コードについて

    改行コードがよく解らないので説明お願いします 様々なサイトの改行コードの説明で LinuxはLF MacはCR WindowsはCRLFと説明しています 私の認識では LF=\n CR=\r CRLF=\r\n だと思っていました ここで疑問なのですが 確かに私の利用した環境ではLinuxの改行コードは\n, Windwosの改行コードは\r\nでした ところがMacの標準のメモ帳(テキストエディット)で文字を入力しても改行コードは\nです 確認方法は od -cというコマンドとfileというコマンドです これはつまりCRではなくLFということですよね? では、なぜ多くのサイトではMacはCRと説明しているのでしょうか? そもそもCR=\rという認識が間違ってるのでしょうか? よろしくお願いします

  • 改行コードの変換について

    OS:Solaris2.6 改行コードをunixからms-dosへ、ms-dosからunixへ変換したいと思っています。 ながれとしては、ms-dosで作成したファイルをunixのほうで編集(プログラム) して、再びms-dosに戻すといったことがしたいと思っています。 そこで、 nkf -e aaa | tr '\r\n' '\n' > bbb nkf -e ccc | tr '\n' '\r\n' > ddd aaa:ms-dos ccc:編集後のファイル これでできると思ったのですが、dddの改行コードの表示がE'で Macintoshの改行コードになってしまします。 また、bbbのファイルですが改行が2回行われてしまいます。 例 aaa のファイルの内容 123 456 bbb のファイルの内容 123 456 どのようにすれば、解決できるか教えていただけないでしょうか? お願いします。

  • Windowsでの改行コード

    HTMLを書くのにあたりUNIXサーバが主流なのだから、 UTF-8、改行コードはLFで行うことを勧められました。 Windowsの改行コードはCR LFだそうですが、 LFにした場合、Windows上でJAVAScriptなどのテストをしたときに 何か不都合があるのでしょうか。 改行コードが CR LF でUNIX上でトラブルになった事例は見つけました。 反対のことが良く分かっていません。よろしくお願いします。

  • 改行コードについて

    ファイルの文字コードはutf-8で改行コードはLFです。 メール送信時にメール文面の一部にいれるテキストを mysqlに保存しています。 メール送信のソース内でデータを読み込み送信までは できているのですが改行コードを変換したく $msg = str_replace("\r\n", "\n", $msg); とやってみましたが改行されず普通に\r\nと表示され うまく変換ができません。 いろいろと試した結果以下のソースでは正常に改行されました。 $msg = str_replace("\\r\\n", "\n", $msg); メール送信前にデバッグでしてみましたが読み込むデータの 改行部分は\r\nとなっているのは確認済みです。 \を多くつければ改行はできるようなのですがこれは仕様なの でしょうか? またmysqlに入れてあるデータはフォームから入力し登録 しているのですがLFの改行コードは\nなので登録時に\r\nではなく \nと変換してからmysqlに登録するのがいいものなのでしょうか?

    • 締切済み
    • PHP
  • perlでの改行コードの置換

    perlで改行コードを置換したいのですが・・・ もとのファイルはS-JISコードでその中身をEUC(UNIXで使用するために)に変換します。ここまではOKなのですが、改行コードがうまく行きません。 改行コードをUNIXで使うためにLFだけにしようと思い、 $line =~ s/\r\n/\n/g; (これは\r\nで引っかからない) とか $line =~ s/\n/\x0A/g; とかにしてみたのですがうまく行きません。 どのようにすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • 改行コード変換しても、引数の受け渡しが出来ない。

    coldfusion と Javascript を組み合わせて、プログラムを書いています。 下記のプログラムは、 データベースからテキストを呼びだし(result.Message)、 その呼び出したテキストの中に、改行コードがあれば<br />に変換しています。 変換したテキストを引数にし、Javascript関数send_messageを呼び出しています。 問題は、ここから、 result.Message の中に元々改行が無ければ、alertウィンドウが出力されるのに 改行が含まれていると、alert ウィンドウが出力されません。 改行コードを<br />に変換しているのにも関わらずです。 この現象は、何が原因なのでしょうか。 解決方法を教えていただきたく、お願いいたします。 <cfprocessingdirective pageencoding="Shift-JIS"> <html> <head> <script language="JavaScript"> <!-- function send_message(message){ alert(message); } </script> </head> <body> <form name="BBS_form" method="post" action="send_message.cfm" enctype="multipart/form-data"> <cfinvoke component="bbs" method="ShowMessages" returnvariable="result"> </cfinvoke> <cfoutput query = "result" > <!--- 改行コードを<br> に変換 ---><!--- result.Message は、text型 ---> <cfset change_mes = Replace(result.Message, Chr(13), "<br />", "all")> <!--- 改行コードを変換しているのに、ボタンを押しても、alert ウィンドウが出力されない。---> <input type="button" name="test" value="テスト" onClick="return send_message('#change_mes#');"> </cfoutput> </body> </html>

  • 改行コードの変換

    TEXTAREAタグの属性wrapにhardを設定したHTMLがあります。 今まで問題はなかったのですが、Window8のIE10だと、なぜか 改行が倍になってしまいます。 調べた所、IE10の特有の問題で、改行が本来「0x0d,0x0a」に したいところ、「0x0a,0x0a」になってしまうようです。 http://answers.microsoft.com/ja-jp/ie/forum/ie10-windows_8/%E5%86%8Die10-textarea/6ee92b5a-46dd-498d-83d8-eede6ec69864 そこで、データ受け側のPHPプログラムで、改行コードを0x0a,0x0aから0x0d,0x0a にしたいと思っていますが、改行コードの変換の仕方がわかりません。 replaseとかだと、\nとか\r\nとかでしか変換した事がないので、0x0aとかの変換 の仕方がわかりません。 また、単純に0x0a,0x0aを0x0d,0x0aに変換すれば解決できるものなのかも疑問です。 本当に改行が複数あった場合などは、どうなるのか? IE10以外のブラウザでは問題ないのか?です。 WindowsのPCはあるので、Windows版のIE10以外のIEやクローム、FireFox、サファリ などは試せますが、マックなどはどういった挙動をするのかも心配です。 ここら辺に詳しい方がおりましたら、アドバイスを頂けると助かります。宜しくお願いします。

    • ベストアンサー
    • PHP
  • 改行コードの<BR>への変換がうまくいきません。

    はじめまして よろしくお願いします。 仕事でPHPを触れはじめたところです。 textarea タグで入力されたものをMysqlに保管し、 また表示するというようなものを作ろうとしています。 困っているのは Mysqlがどうのではなくその登録前に 改行コードを <br>タグ に変換をかけておこうというところで躓いています。 セッションを開始しておいてFormタグからの値を 次のページで受け取っています。 ここの過去ログ等を参考にしてみたのですが... $_SESSION['e_biko'] = htmlspecialchars($_POST['biko'] , ENT_QUOTES) ; $tmp_biko = ""; $tmp_biko = str_replace("\r\n", "\r", $_SESSION['e_biko']); $tmp_biko = str_replace("\r", "\n", $tmp_biko); $_SESSION['e_biko'] = str_replace("\n", "<br>", $tmp_biko); このあとでechoを使って$_SESSION['e_biko'] を表示させています。 しかし改行しないんです。<BR>タグへの変換ができておらず、表示されたHTMLのソースコードを見ると改行コードがそのまま出力されています。 HTML及びPHPの文字コードはEUCで記述しています。 開発及び確認はWindows・IE6で行っています。 何か考えられる原因、あるいはバグかあるでしょうか? ちなみに下記でも駄目でした。 $_SESSION['e_biko'] = preg_replace("/\r\n|\r|\n/", "<br>", $_SESSION['e_biko']); お分かりになられる方おられましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 特定の改行コードだけ削除する

    CSVファイルを変換するPGを書きたいのですが、 変換したいCSVには改行コード\nと\r\nが混在しています。 改行コード\r\nはそのままにして \nだけ削除したいのですが どのように書けばよろしいのでしょうか。 Perlは5.12.2です。 よろしくお願いします。

    • ベストアンサー
    • Perl