改行コード変換のタイミングについて教えてください。
前提:
\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の仕様を調べる必要があるのか・・・
どこがやっていることなのかわからないもので。
No.2ベストアンサー
- 回答日時:
そう言う事でしたか。
。理解力不足で申し訳ありませんでした。
このコード変換は、サーバーサイドではなく、クライアントサイドで行われます。
IEやNNでの仕様と思って貰えば良いと思います。
この回答への補足
いぇ、こちらこそ、お答えいただきありがとうございます。
再びの補足で申し訳ないのですが、
>このコード変換は、サーバーサイドではなく、クライアントサイドで行われます。
とのことですが、
この仕様についてを実際に確認できるドキュメントなどはどこかに公開されているでしょうか?
また、調べるための方法&ツール(ブラウザのパーサー部が解析する前の通信状態を表示することができるブラウザなど)はないでしょうか?
よろしくお願いします。>皆様
とりあえず、締め切ることとします。
実験手法や公式(に近い)情報ソースがわからなかったのは残念ですけど、クライアントサイドで行われる、とおっしゃってくださった方がいたことだけでも大収穫です。
やはり、汎用性を考えると、どこでであれ、自動的に変換解釈が行われないような方法を採った方がいいですね。
どうもありがとうございました。
No.1
- 回答日時:
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でクライアントに送られ、ブラウザがそのデータを取得し、解析される
までの一連の過程の中で起こっている文字コード変換の、タイミングと発生条件が
今回の質問の中心です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「彡」って文字はなんという文...
-
Excelマクロにて30分単位の計算...
-
EBCDIC⇒SJIS変換の方法
-
文字コード(EUC->SJIS)につい...
-
セル内の文字列が日本語か英語...
-
エンコーダICについて ちょっと...
-
画像データ(png)をcsvファイル...
-
sedで日本語の置換方法について
-
latin-1 (ISO-8859-1)への変換
-
ExcelVBA実行後に時々落ちる
-
VB.NETのコンソールアプリケー...
-
C#で16進数からASCIIへの変換の...
-
C#でバイナリデータをテキスト...
-
数字5桁文字コード?
-
JIS → S-JIS コード変換するには
-
RubyでUTF8のコード値を文字に...
-
2バイト文字をJEFからSJISに変...
-
改行コード変換のタイミングに...
-
PS4コントローラーをPCでゲーム...
-
VBAにおける文字列結合と繰り返...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
セル内の文字列が日本語か英語...
-
ExcelVBA実行後に時々落ちる
-
VS 2008(VB.NET)
-
sedで日本語の置換方法について
-
フォームのコントロールのバッ...
-
Symfowareでのデータ型変換につ...
-
CASLⅡ 文字データから数値デー...
-
COBOLによる全角・半角混...
-
数値のパック10進数の変換に...
-
2バイト文字をJEFからSJISに変...
-
ふりがなをアルファベット化す...
-
latin-1 (ISO-8859-1)への変換
-
JIS → S-JIS コード変換するには
-
VB.NETのコンソールアプリケー...
-
Excelマクロにて30分単位の計算...
-
英数字を含む文字列(0-9,A-Z)...
-
VB6.0のコードエディタでの改行...
おすすめ情報