[PHP-users 5070] Re: 改行コードに関する質問

Hiroshi Morita php-users@php.gr.jp
Tue, 29 Jan 2002 15:54:53 +0900


tyuu です。

もう、収束しているようですが、
DB にしまう時は <BR> ではなく \n のままが良いと思います。

> というわけで私もDB(PostgreSQL)に格納する前に<br>を挿入し、
> 次に正規表現置換関数を用いて改行コードは削除しています。
> これはDBのBKUP等でpg_dump(テキスト出力される)を使用しているのために
> フィールドデータに余計な改行コードが残っていると DBに戻すときに
> 障害となるからです。
> (これももしかしたらpg_dumpの指定で何とかなるのかな?)

以下のようにして作成された table と改行の入った値を
pg_dump と psql を利用してrestore できますよ。
# できないのかと思って調べてしまった。
-----------------8<------------------------------
CREATE SEQUENCE test_key_seq;
CREATE TABLE test (
    key INTEGER DEFAULT nextval('test_key_seq'),
    value TEXT,
    PRIMARY KEY( key )
);
CREATE UNIQUE INDEX foo_key_seq on test( key );

INSERT INTO test(value) VALUES ( 'abc
def' );
INSERT INTO test(value) VALUES ( 'ghi
jkl' );
----------------->8------------------------------
# pg_dump [DB_NAME] > hoge
# psql [DB_NAME] -f hoge
# psql [DB_NAME]
select * from test;


で、これだけだと pgsql-jp ねたなので、
僕は DB から取り出した値をhtml を書き出す前に check しています。
なんか、もっと良いコーディングがあったら教えてください。

// $n は <TEXTAREA> 用
function print_HTML( $s, $n = '<BR>' ){
  $s = str_replace( '&', '&amp;', $s );
  $s = str_replace( '>', '&gt;', $s );
  $s = str_replace( '<', '&lt;', $s );
  $s = str_replace( ' ', '&nbsp;', $s );
  //$s = str_replace( "\n", '<BR>', $s );
  if( "\n" != $n )
    $s = str_replace( "\n", $n, $s );
  return $s;
}

by tyuu.