改行が残る件
javascriptでformで入力されたの文の改行文字を<br/>に変換していたんだけど、
以下のコードはメインのmacのfirefox2では上手くいっていたが、それ以外では改行が残ってエラーになった。
msg.replace(/\n/g,'<br/>'); alert(msg); /* form中身 foo bar baz 実行結果↓ foo <br />bar <br />baz */
以下のように書けば他(IE,Op等)でも上手くいった。
msg.replace(/(\r|\n)/g,'<br/>'); alert(msg); /* form中身 foo bar baz 実行結果↓ foo<br />bar<br />baz */
よくよく考えると、firefoxで上手くいくほうがおかしいのかもしれない。
改行コードには2種類あって、CRとLFというんだけど、
それぞれ
CR | /\r/ | \x0D(13) |
LF | /\n/ | \x0A(10) |
と表す。
で、OSによって使うコードが違う。
対応状況は以下
mac | CR | \x0D(13) |
unix | LF | \x0A(10) |
windows | CRLF | \x0D\x0A(1310) |
見るとわかるように、windowsには改行文字が二つはいっている。
なので、この二つを指定してやら無いといけない。よって、/(\r|\n)/gとなる。
ちなみに、
foo
<br />bar
となることからも、CRLFの順であることが伺える。
macは最近unix化したので、おそらくLF(/\n/)で問題なかったんじゃないか。
でもwinでもfirefoxだと上手くいってたしなーそのあたりは謎。