改行コード変換のタイミングについて教えてください。
前提:
\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の仕様を調べる必要があるのか・・・
どこがやっていることなのかわからないもので。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

そう言う事でしたか。


理解力不足で申し訳ありませんでした。

このコード変換は、サーバーサイドではなく、クライアントサイドで行われます。
IEやNNでの仕様と思って貰えば良いと思います。

この回答への補足

いぇ、こちらこそ、お答えいただきありがとうございます。
再びの補足で申し訳ないのですが、

>このコード変換は、サーバーサイドではなく、クライアントサイドで行われます。
とのことですが、
この仕様についてを実際に確認できるドキュメントなどはどこかに公開されているでしょうか?

また、調べるための方法&ツール(ブラウザのパーサー部が解析する前の通信状態を表示することができるブラウザなど)はないでしょうか?
よろしくお願いします。>皆様

補足日時:2001/07/29 23:19
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/01 16:48

CGIプログラムの中で、改行コード変換を行った上でのお話ですか?


それとも、CGIの中で改行コードの変換ロジックを入れていないのでしょうか?

<<改行コード変換ロジック>>
$val =~ s/\r\n/\n/g;
$val =~ s/\r/\n/g;

もし、改行コードの変換をされていないのであれば、そのロジックを入れないと正しく動作されないと思います。

変換を行うタイミングは、GET 又は POSTでデータを取得した後、そのデータを変数データとして扱う処理を行うタイミングで良いと思いますが・・・・

「こんな事は当然やった上での話だ!」と思われてしまったら、ごめんなさい。

この回答への補足

ご回答ありがとうございます。説明不足で申し訳ありません。
Perlスクリプト内ではコード変換は行っておりません。
これは、FROMからくる入力データには複数行文字列はないため、当然改行もなく、
必要がないためです。

あくまでも、"出力時"にUNIXサーバ上に保存されているデータを\nを使い連結して
一つのデータとしてHTML出力し、後からJavaScriptで配列化しております。
そのため、UNIXサーバでperlスクリプトが動作して、TCP/IPプロトコルにのっかって
httpでクライアントに送られ、ブラウザがそのデータを取得し、解析される
までの一連の過程の中で起こっている文字コード変換の、タイミングと発生条件が
今回の質問の中心です。

補足日時:2001/07/27 11:37
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qperlで、[ \r\n , \n ]の意味は?

シンプルなCGI掲示板の勉強中ですが、

$message =~s/[ \r\n , \n ]/<br \/>/g; となっており、
これは改行文字を<br />に置き換えるのだそうですが、
[ \r\n , \n ]の部分というのはどういった意味でしょうか。

[ abc ]だと、a,b,cのうちどれか1文字は入っていれば良いですよね。
[ ]に「,」が入るとよく分からなくなります。

お分かりの方、教えてくださいませんか。
よろしくお願いいたします。

Aベストアンサー

サンプルは、
$message =~ s/\r\n/<br \/>/g;

$message =~ s/\n/<br \/>/g;
1行で済ませようとして間違ってしまったのでしょうか?

\r 復帰文字(return)

\n 改行(newline)

「,」カンマそのもの

\r 復帰文字 (return)
のいずれかを<br />に置き換える、という意味になってしまうでしょうね。
この目的のためには、

$message =~ s/\r\n/<br \/>/g;
$message =~ s/\r/<br \/>/g;
$message =~ s/\n/<br \/>/g;

と3行記述するのがいいのではないでしょうか?

参考サイトに私が勉強させてもらっているサイトを紹介しておきます。

参考URL:http://www.rfs.jp/sitebuilder/perl/04/07.html

Q\t\t の意味

print "\t\t<TR>\n"; の
\t\t の意味はなんですか、
宜しくお願いします。

Aベストアンサー

\tは「TAB」の意味で、通常は半角で8文字のスペースが表示されます。
ですから、\t\tでTAB2個分の空白があくことになります。

QHTTPDの AN HTTPサービス開始不可 なぜ?

困ってますのでどなたかおしえてください。
自宅サーバーをWindows Meにて立ち上げる最中なのですが、AN HTTP Server Home Pageにてhttpd Ver 1.42nを取得。httpdを“オプション一般"で開くと本来あるはずの“サービス”(“ログ”のすぐ隣)がないのでAN HTTPサービスを開始できなくて困っています。もう一台のXPでは問題ないのに・・Meはほかにも設定がいるのでしょうか?それとも何か私が見逃していることがあるのでしょうか?よろしくお願いします。

Aベストアンサー

自分のIPアドレスを調べて、
htp://IPアドレス/
で確認。

>HTTPサーバーとして動作してなくも、そのままアドレスを入力したら表示されるため
これは、
http://127.0.0.1/
にアクセスすれば確認できるかと。
(hはあえて全角にしてあります)

Qhttpとhttps間で商品データのcsvファイルを共有する方法

始めまして
私は、cahma netさんのcahma cargo「http://chama.ne.jp/download/cargo/index.htm」を使用させてもらっているのですが
httpに配置した「商品データーのcsvファイル」をhttpsに配置したcgiから読み込みたいのですがどうもうまくいきません。パーミッションの問題なのでしょうか?私の借りてるサーバーでは707・777等は、エラーを返されます。それともパーミッション以外に原因などはあるのでしょうか?どなたかお詳しい方教えて下さい!お願いします。

Aベストアンサー

絶対パスで一番身近なのはPerlのパスだと思います。
CGIの先頭行に

#!/usr/local/bin/perl

とか、書きますよね。この場合、

/usr/local/bin/perl

がPerlへの絶対パスです。
「#!」は宣言みたいなもので、スクリプト内の先行頭で使うだけのものなので混同しないように気を付けてください。
絶対パスというのは / から必ず始まります。
ほとんどのホスティングというのはFTPでログインしたディレクトリより上位階層があるのは先に述べたとおりです。
業者さんに問い合わせるのが早いと思いますが、以下のようなCGIでも調べる事が可能です。

#!/usr/local/bin/perl
print "Content-Type: text/html\n\n";
print $ENV{'SCRIPT_FILENAME'};

適当な名前で保存して(path.cgiとか)実行してみてください。
このCGIの絶対パスが表示されると思います。

下で相対パスの事を書きましたが、
CGIでのファイルの参照は相対でも絶対でもどちらでも構いません。

絶対パスで一番身近なのはPerlのパスだと思います。
CGIの先頭行に

#!/usr/local/bin/perl

とか、書きますよね。この場合、

/usr/local/bin/perl

がPerlへの絶対パスです。
「#!」は宣言みたいなもので、スクリプト内の先行頭で使うだけのものなので混同しないように気を付けてください。
絶対パスというのは / から必ず始まります。
ほとんどのホスティングというのはFTPでログインしたディレクトリより上位階層があるのは先に述べたとおりです。
業者さんに問い合わせるのが早いと思いますが、...続きを読む

QCGIを勉強しています。¥n(改行)の【n】は何の英単語の略ですか。

はじめまして。

CGIを勉強しています。

¥n(改行)の【n】は何の英単語の略ですか。

教えていただきたく、よろしくお願い致します。

Aベストアンサー

ついでに、
\n NewLine  LF(Line Feed:行頭へ戻る)
\r Return   CR(Carriage Return:次の行へ)
 WindowsではCR+LF[\x0D\x0A]、Mac OSではCR[\x0D]、UNIXではLF[\x0A]を使います。厳密にはもっとやややこしいけど、PerlでCGIを書くときはこれでよい。


このカテゴリの人気Q&Aランキング

おすすめ情報