PHPのヒアドキュメントで改行コードが CR(0x0D)LF(0x0A) のものをserialize()すると、unserialize()でfalseになるってのに悩まされ、結局、str_replace(array(“\r\n”,”\r”),”\n”,$string); ってやってからserialize()する事で解決した。
で、これでホンマに大丈夫か? と色々検索してると、
「str_replace( “\r\n”, ‘\n’, $text ); で置換できない。なんでだ?」 と書いてあるページを見つけた。
確かにシングルクォートで囲ったらエスケープシーケンスは単なる文字列になっちゃうねえ…。それはそういうルールだからしょうがないとしか言いようがない。
逆に、シングルクォートで囲ったものも、エスケープシーケンス有効ってルールだったら、エスケープシーケンス無効化の為に’\\n’とか書かないといけなくなるってのは嫌すぎる。
なんでこういうので引っ掛かるのかなあ? と考えるに “文字列”が文字列を現し、’A’は一文字を現すC言語やってた人ならそういう書き方になるのでは?と思いついた。
わしもPHPやり始めた頃は、文字列は”文字列”で一文字は’A’みたいな書き方してた事があったし、まあ、PHPのルールを学んでいく内に段々分かってくるものってのがあるねえ。