- ベストアンサー
Windowsでの改行コード
HTMLを書くのにあたりUNIXサーバが主流なのだから、 UTF-8、改行コードはLFで行うことを勧められました。 Windowsの改行コードはCR LFだそうですが、 LFにした場合、Windows上でJAVAScriptなどのテストをしたときに 何か不都合があるのでしょうか。 改行コードが CR LF でUNIX上でトラブルになった事例は見つけました。 反対のことが良く分かっていません。よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
質問を誤読していたので訂正。 改行を LF にして確認してみたけど、改行が LF になるか CR+LF になるか CR になるかは、ブラウザ依存っぽい。 改行を LF にしても Internet Explorer 8 → 4:13 って表示されたから、 HTML は改行コードをなんにしても [ANo.1] さんの回答のとおり問題なくて、 「ブラウザは改行コードが CR+LF だろうが LF だろうが CR だろうが関係無く、正しく解釈して処理してくれます。」 以下 [ANo.2] のつづき JavaScript で扱うときは、ブラウザごとに改行コードが違うから、 \r\n → \n \r → \n してから使う。 逆に、JavaScript で改行を正常に入れたいなら、 Firefox 11.0 → \n Google Chrome 18.0 → \n Internet Explorer 8 → 正しく扱うコードがない で、困ったから、いろいろ試してみたら、 Internet Explorer 8 では、 textarea のように .value 属性があるなら .value 属性をを使って \n で OK .value 属性がないなら Text ノードの .data 属性を使って \n で OK .innerHTML="…\n…" や .createTextNode("…\n…") とか .innerHTML="…\r\n…" や .createTextNode("…\r\n…") では正常に改行を扱えない。 試したコード <!DOCTYPE html> <html> <head> <title>textarea line-feed</title> </head> <body> <!-- <textarea id="target"></textarea> --> <pre id="target">a</pre> <script> (function (el) { //el.value = "a\na"; el.firstChild.data = "a\na"; //el.appendChild(document.createTextNode("a\na")); //alert(el.innerHTML.length +":"+ el.innerHTML[1].charCodeAt()); alert(el.childNodes.length +":"+ el.firstChild.data[1].charCodeAt()); //lert(el.value.length +":"+ el.value[1].charCodeAt()); })(document.getElementById("target")); </script> </body> </html>
その他の回答 (5)
No.4 さんへのお答え。 Webページは例外なくHTTPで転送されますが、現在のバージョンは1.1です。 HTTP1.1を規定しているのはRFC2616です。 これが本家のドキュメント。 http://www.ietf.org/rfc/rfc2616.txt 有志による日本語訳はこちら。 http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616 ひとつ自分も誤解してました。 HTMLソースコード(エンティティボディ)は CR + LF 以外でも良かったです。 HTTPヘッダと勘違いしていました。すみません。
お礼
そろそろ締め切ってもいいでしょうか? 私自身も大変勉強になりました。 HTTPヘッダとかよく聞きますけど、 私には縁遠いものだなと思っていました。
- dscripty
- ベストアンサー率51% (166/325)
横槍歓迎。 気が向いたらでいいけど、探す手間が省けるから ↓の根拠となった文書の URL を追記してくれるとうれしい! 「HTML ソースコードに使用する改行コードは CR + LF が正式です。」
横槍のようですが、少し誤解なさっているようなので。 \r = CR \n = LF では「ありません」。改行文字と改行コードとの対応は環境に依存します。 Windows では \n = CR + LF、 Linux では \n = LF です。 また、HTML ソースコードに使用する改行コードは CR + LF が正式です。 LF への対応は推奨されるレベルです。 メジャーなブラウザであれば対応しているとは思いますが。 JavaScript での文字列取得、および処理もやはり環境に依存しているので、 1. 「その処理系で使われている改行文字」を取得する 2. OS と ブラウザとの組み合わせで改行文字を決め打ちする こういった方法しかありません。 クロスプラットフォームにしようと思うと、往々にしてこのような対応に迫られるものです。
お礼
どうもご回答有り難うございます。 ここでも人によって解釈の違いが出てきましたね。 Webで\r = CR、\n = LFと紹介しているページも見つけました。 ひょっとして言語単位でも扱いが違うのでしょうか? 私が今回作り直しかなと思ったのは、 こういう意識の差が大きいと思ったからです。 仰るとおり、UTF-8とLFで統一するのは決め打ちなのです。 将来的に問題が少ない方にしておこうという準備です。 >JavaScript での文字列取得、および処理もやはり環境に依存 JAVAScriptで改行コード取得は今のところ遭遇してませんが、 現在作っているJAVAScriptのソースの改行コードをLFで統一したら windowsでどんな問題が起こるんだろうって気になっています。
- dscripty
- ベストアンサー率51% (166/325)
.innerHTML や textarea の .value で扱うときに、問題になると書いてあるブログ。 http://d.hatena.ne.jp/brazil/20060917/1158465641 http://amon.dip.jp/index.php?%A5%C6%A5%AD%A5%B9%A5%C8%A5%A8%A5%EA%A5%A2%C6%E2%B2%FE%B9%D4%A5%B3%A1%BC%A5%C9%A4%CE%A5%D6%A5%E9%A5%A6%A5%B6%B4%D6%C8%F3%B8%DF%B4%B9%C0%AD%A4%CE%B2%F2%BE%C3%CB%A1%28Javascript%29 どっちにしても、 \r\n を \n に変換したあと、 \r を \n に変換して、 \n を改行として使えば、たいていは問題ないとおもう。 <!DOCTYPE html> <html> <head> <title>textarea line-feed</title> </head> <body> <textarea id="textarea">a a</textarea> <script> (function (el) { alert(el.value.length +":"+ el.value[1].charCodeAt()); })(document.getElementById("textarea")); </script> </body> </html> 以下、Windows XP SP3 で確認。 Internet Explorer 8 → 4:13 Firefox 11.0 → 3:10 Google Chrome 18.0 → 3:10 逆に、改行を要素に追加するときは、ブラウザによって変えないと駄目かも。。。(未確認) HTMLの仕様も未確認。
お礼
こんな細かいことがあったなんて目が点になりました。 これはなんか統一して欲しいですよね。 急に言われて、調べてたら色んな問題が噴出しました。 そろそろ作り直しの時期かもしれません。 ハングルあるのにShift-JISだし。 やっぱりLFが一番手堅いみたいですね。 どうもご回答有り難うございました。
- t_ohta
- ベストアンサー率38% (5238/13705)
特に支障はありません。 ブラウザは改行コードが CR+LF だろうが LF だろうが CR だろうが関係無く、正しく解釈して処理してくれます。 改行コードが CR+LF でUNIX上でトラブルのは、シェルスクリプトかPerlのプログラムなど、サーバサイドで実行するプログラムの時です。
お礼
ご回答有り難うございます。 逆のケースで何も問題なしなら、そちらに統一したいと思います。 一括変換プログラムも色々出てきているみたいです。
お礼
再度試して頂いたようで恐縮です。 value属性やdata属性ということですね。 今のところ、このケースには遭遇していないので問題ないのですが、 将来的に役に立ちそうです。どうもお手間をおかけしました。