今日は恥ずかしい失敗をしたのでメモ。
ファイルメーカーのデータをタブ区切りテキストにして出力したのをPostgreSQLにコピっている私ですが、ここで問題が。ファイルメーカーはフィールド内での改行ができるのだけど、その情報が出力したテキスト書類に反映されない。が、何も見えなくても、ファイルメーカーのフィールド内の改行コード"0x0b"が文字の間に埋め込まれているらしい。ならば、それをHTMLの改行タグ"<br>"にすればいいじゃん、と思ったがそんなに簡単じゃなかった。教えてもらったのは、こんなかんじ。(ファイル名はフルパスでよろしく。)
出力はターミナルのみ。
cat ファイル名.txt | perl -n -e 's/0b/<br>/g;print'
新しいファイルに出力
cat ファイル名.txt | perl -n -e 's/\x0b/<br>/g;print'>新しいファイル名.txt
hoge.txt を処理して、結果を hoge.txt に格納しつつ、元ファイルを hoge.txt.bak に保存
perl -i.bak -n -e 's/\x0b/<br>/g;print'ファイル名.txt
とまあ、教えてもらったとおりにしたら、見事!、謎の改行コードは"<br>"になったわけですが・・・。
・・・HTMLに出力するときにPHPで"htmlspechialchars()"を混ぜてたので、見事!、特殊文字("<"とか">")は実態参照("<"や">")とやらに変換されてしまったという・・・。ステキにバッチリ"<br>"(ソース的には"<br>")と出力されてますよ、奥さん。がっくし。(ああ、消え入りたい・・・。)
ちなみに、このブログを書いているときも、逆にタグが全部認識されちゃうから大変っすよ。特殊文字は全部手で実態参照とかいうのを打ってます。ちなみに、Macからは改行以外はタグを挿入してくれないので、フォント設定もあいかわらず手でタグ打ってます(笑)。ソースを見ていただけたら、私がどれだけ苦労しているかが垣間見えると思います。くそー。
続き。結局、PHPで出力するときに、
str_replace("\x0b", "<br>", htmlspecialchars($hoge))
としたらうまくいきました。難しく考えすぎだったのかなぁ。
ファイルメーカーのデータをタブ区切りテキストにして出力したのをPostgreSQLにコピっている私ですが、ここで問題が。ファイルメーカーはフィールド内での改行ができるのだけど、その情報が出力したテキスト書類に反映されない。が、何も見えなくても、ファイルメーカーのフィールド内の改行コード"0x0b"が文字の間に埋め込まれているらしい。ならば、それをHTMLの改行タグ"<br>"にすればいいじゃん、と思ったがそんなに簡単じゃなかった。教えてもらったのは、こんなかんじ。(ファイル名はフルパスでよろしく。)
出力はターミナルのみ。
cat ファイル名.txt | perl -n -e 's/0b/<br>/g;print'
新しいファイルに出力
cat ファイル名.txt | perl -n -e 's/\x0b/<br>/g;print'>新しいファイル名.txt
hoge.txt を処理して、結果を hoge.txt に格納しつつ、元ファイルを hoge.txt.bak に保存
perl -i.bak -n -e 's/\x0b/<br>/g;print'ファイル名.txt
とまあ、教えてもらったとおりにしたら、見事!、謎の改行コードは"<br>"になったわけですが・・・。
・・・HTMLに出力するときにPHPで"htmlspechialchars()"を混ぜてたので、見事!、特殊文字("<"とか">")は実態参照("<"や">")とやらに変換されてしまったという・・・。ステキにバッチリ"<br>"(ソース的には"<br>")と出力されてますよ、奥さん。がっくし。(ああ、消え入りたい・・・。)
ちなみに、このブログを書いているときも、逆にタグが全部認識されちゃうから大変っすよ。特殊文字は全部手で実態参照とかいうのを打ってます。ちなみに、Macからは改行以外はタグを挿入してくれないので、フォント設定もあいかわらず手でタグ打ってます(笑)。ソースを見ていただけたら、私がどれだけ苦労しているかが垣間見えると思います。くそー。
続き。結局、PHPで出力するときに、
str_replace("\x0b", "<br>", htmlspecialchars($hoge))
としたらうまくいきました。難しく考えすぎだったのかなぁ。