こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

NL2BRの不可解な結果

初めて質問します。
まず、「NL2BR」で検索して2つのスレッドを読みました。どれもNL2BRを知らない方への回答で紹介されたものです。
遠方のLinux(2.2.16)にSSHで入り込んで、Apache + PHP4 + PostgreSQL でのWEB-DB用のPHPスクリプトを作成し、クライアントとしてはWindows-NT4.0(SP6a) + IE(6)でテストしております。

ところで、悩みとは、NL2BR関数の戻り値がおかしいと言う事です。New Line(NL)が無くならず、
<BR />
なるデーターに変換されます。

次に、PHPが NLを含むテキストデーターを $junk で受け取ったとして、
ereg_replace("\n", "<br>", $junk);
としても、クライアント側に返送されるデーターには改行情報が残ってしまいます。
で、最後に
ereg_replace("\r\n", "<br>", $junk);
として、初めて当初のNL2BRの目的のデーターに変換できました。旨くいったのですからいいのかも知れませんが、悩んでいます。

悩み1:バグなのか、コンパイルミスなのか?
 同じ結果の方はおられませんか?コンパイルミスなら同じライブラリーを参照する他の関数にも悪い影響が存在するのかも知れません。

悩み2:もしもバグなら、
 どこかにバグの検索ページは無いでしょうか? また、パッチの配布を紹介しているページを知りませんか?

悩み3:クライアント側のOSやブラウザーで影響するのかどうか?
 ネスケで実験したりする予定ですが、あくまでもMS上での事。マックではどうなのかとか、携帯モバイルだとどうなのかとか考えてしまいます。どなたか、この混沌から技術的に明らかにして欲しいと願っていますが、頼めますでしょうか。よろしくお願いいたします。

Linux: 2.2.16
PostgreSQL : 7.1.2
PHP4 : 4.0.5

回答が無ければ、悩まないで、NL2BRの利用を断念します。時間を見付けて、PHP4のソースを変更しようと思います。

投稿日時 - 2002-04-11 15:30:36

QNo.251009

困ってます

質問者が選んだベストアンサー

全ては分からないので、分かるところだけ答えます。

>NL2BR関数の戻り値がおかしいと言う事です。New Line
>(NL)が無くならず、
><BR />
>なるデーターに変換されます。

http://php.zyprexia.com/manual/ja/function.nl2br.php
そう言う仕様ではないですか?

>次に、PHPが NLを含むテキストデーターを $junk で受け取ったとして、
>ereg_replace("\n", "<br>", $junk);
としても、クライアント側に返送されるデーターには改
>行情報が残ってしまいます。

これは分かりません。私の環境ではこれでうまくいきます。
ものすご~く当てにならない予測ですが、文字コードは大丈夫でしょうか?
内部設定EUC-JPなのにSJISを使っていないか調べてみてください。

>悩み1:バグなのか、コンパイルミスなのか?
少なくとバグではないと思います。
# 聞いた事ありませんから。
また、./configureはどのようなオプションを付けたのでしょうか?

>悩み3:クライアント側のOSやブラウザーで影響するのかどうか?

携帯モバイルの場合、ものすごく影響が出るのが文字コードです。
その当たりもう一度当たってみた方がいいかもしれません。

user_agentを拾って、相手のブラウザを判断し、
普通のパソコンからのアクセスの場合はEUC-JPそのままで表示。
携帯からのときは、SJISにエンコード。
この点は気を付けましょう。

でわでわ

投稿日時 - 2002-04-11 22:56:09

補足

kusukusuさま、おはようございます。
アドバイスに感謝します。

>http://php.zyprexia.com/manual/ja/function.nl2br.php
>そう言う仕様ではないですか?

 早速のご指摘に感謝します。NL2BRの文字で「置換」処理だとばかり考えておりました。置換ではなく「挿入」処理なのですね。すると、PHPスクリプト内で JavaScriptの変数に文字列としてクライアントに戻すような場合は、最初からNL2BRだけでは無理があり、ereg_replace を利用することが正解と認識するべきですね。悩みが1つ無くなりました。ありがとうございます。(早計かな)

>これは分かりません。私の環境ではこれでうまくいきます。
>ものすご~く当てにならない予測ですが、文字コードは大丈夫でしょうか?
>内部設定EUC-JPなのにSJISを使っていないか調べてみてください。

PostgreSQLへの書き込み以前での確認ですので PostgreSQLは無視したとして、LinuxですのでEUCを基本にしています。PHP3では /usr/local/lib/php3.iniでi18n関連のエンコード/デコード定義関数があったと思うのですが、PHP4ではインストールのまま利用しております。htmlでの METAタグによる文字コード宣言は故意に廃止し、yahooさんのポリシールールと同様に、EUC独自の漢字をhtmlファイル先頭に埋め込みブラウザーにEUCを認識させています。Linux内のHTMLファイルもEUCで書き込んでおります。

>少なくとバグではないと思います。
># 聞いた事ありませんから。
>また、./configureはどのようなオプションを付けたのでしょうか?

 そうですか。やはり固有のトラブルですか。レポートがありませんので、コンパイルミスなのですね。ガックリ(^^);
イントラネット用 Apacheと言う事でSSLを無用とし、デーモン常駐ではなく、ポート80コールでhttpdを必要な時だけ立ち上げることにし、Apache の --enable-module=so をコンパイル時に選択していません。PHP4のコンパイル時のオプションは以下の通りです。

../configure --enable-jstring \
--enable-mbregex --enable-iconv --with-pgsql \
--enable-trans-sid --enable-track-vars

です。PHP3の時は技術評論社「改訂版 PostgreSQL完全攻略ガイド」石井達夫氏を参考にし何も問題はなかったです。PHP4は秀和システム「PHP4でカンタンWebDB構築ガイド」初版ですが、書かれている通りには上手く出来なかったです。
宜しければ、kusukusuさまのご利用中の PHP4のバージョンと configure 時のオプションを教えてはいただくか、参考にされたWebサイトを教えて戴けませんか?(甘え過ぎかも知れません) NAMAZUやKAKASHIは現在は利用していませんが、将来的にはインストールしたいです。Apacheのバージョンはインターネット側のSSL版と同じバージョンにしておきたいので特にApacheのバージョンアップは考えていないのですが、必要があればコンパイルの再実行は実施したいと思います。PostgreSQLも、バージョンアップしたいですが、DBデーターの移行に問題が無いか別システムで実験してから行います。PHP4と日本語化パッチのインストール情報があるWebサイトをご存知ではないでしょうか?(これはなんなら別スレッドで質問してみます)

>携帯モバイルの場合、ものすごく影響が出るのが文字コードです。
>その当たりもう一度当たってみた方がいいかもしれません。
>user_agentを拾って、相手のブラウザを判断し、普通のパソコンからのアクセスの場合はEUC-JPそのままで表示。
>携帯からのときは、SJISにエンコード。
>この点は気を付けましょう。

 ご指摘に感謝いたします。注意します。ありがとうございます。また、質問のようになってしまいましたが、お暇な時に見てやって下さい。(^^)

投稿日時 - 2002-04-12 09:46:44

お礼

親身で親切でご丁寧な回答に感謝します。ありがとうございました。
Sun Apr 14 08:57:15 JST 2002

投稿日時 - 2002-04-14 08:59:02

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんばんは、相変わらず、続・雑談です(笑)

>>私の参考書はマンモス本です。最近青マンモスも発売に
>>なり、すぐに購入しました!

>なるほど、早速、本屋に足を伸ばそうと思います。インパクトに感謝します。
レスを見る限りujikiさんのレベルでは赤マンモスは不要でしょう。あくまでも初心者向けの本です。
しかし、青マンモス「PHP4徹底攻略・実践編」は、大変内容が濃いく(私もまだ全部読んでいませんが(^^;)おすすめです。
事に、色々な外部ライブラリや、セキュリティ、XMLを扱うに付いて等、中級上級者向けの内容です。

# 私は決して広川様(著者)ではありません(^^;
# いい本だから勧めているだけです。(笑)

>顧客の現在稼働中のシステムへの追加開発中ですので、
>バージョンアップは簡単には出来ないですね。(^^)

気持ちは痛いほど分かります。私もその苦痛を乗り越えて(まだ途中ですが(^^;)来ましたから。
しかし、register_globals=onの恐怖が分かれば、やっぱり変えたいと思うと思います。
普段から、GET POST COOKIE で渡された変数を、受け取った側で、
$HTTP_GET_VARS[hoge];
等と、初期化して使っていれば、だいぶ楽ですが
($_GET[hoge]に一括変換)
私の場合は、もろにしていなかった報いを受けました(^^;
コードを一行ずつ追いかけ修正しました。
ホントに死にましたよ(笑)

>ご親切な警告に感謝致します。調査しますが、PHPスク
>リプトソース毎に、register_globals=On/Offを切り替
>える事を暫定的にも利用できる事を期待して

これはただの期待ですか?それともそう言う話があるのでしょうか?
もし後者であれば、「聞き捨て出来ない話」なのですが・・・(私もそれが出来て欲しい)
修正したとはいえ、それは今開発中のスクリプトです。
過去の遺産を(これを全て直す事を考えると、気の遠くなるほど・・・)修正する事を考えると・・・
まだまだ、自作クラスファイルを手つかずの方が多いくらいですから(^^;

>画像までハンドリングされてるとは、素晴らしいシステ
>ム開発をされておいでですね。是非、益々成功される事
>をお祈りいたします。

(^^;・・・全然です。私はまだ初心者のレベルを出ておりません(PHP-USERSには是非入る事をおすすめします。めちゃくちゃレベル高いです。私はそこでは教えて君です(^^;)

画像は面白い?ですよ。エクセルのような、数値を入力すると、グラフを書くスクリプトを書きましたが、なかなか気に入っています(^^;

>そのポリシーには大いに賛成です。折角のLinuxのアプリケーションですから、
>(snip)
>重ねて感謝いたします。

そうですね。向上心こそが一番大切ですね。
私は常に高レベル技術者のそう言う冒険心で出来た産物の恩恵にあずかっています。
私がそう言う技術者になれるとは思わないし、目指してもいません。
しかし、自分の得た知識を示す事によって、助かる人も中にはいるのでは?と言う思いで発言します。
# 何度もきつい発言をして、ここの管理者に消された事もありますが(^^;
PHP-USERSで得た知識を、そのMLには還元できません。
(高レベルすぎて)
だから、他の色々な場所で還元できればと思っています。

お互い頑張りましょう。
では

投稿日時 - 2002-04-13 01:01:30

補足

>青マンモス「PHP4徹底攻略・実践編」は、大変内容が濃いく(私もまだ全部読んでいませんが(^^;)おすすめです。
>事に、色々な外部ライブラリや、セキュリティ、XMLを扱うに付いて等、中級上級者向けの内容です。

 了解しました。重ね重ねのご配慮に感謝します。(^^)

>これはただの期待ですか?それともそう言う話があるのでしょうか?

 未確認です。小生が開発者なら… 自由度を与えたいと考えるからです。INCLUDE で読み出す場合、function 内などなど、切りかえれれば随分と移植期間の融通が出てきます。function 内での global 宣言のように… (^^)

>画像は面白い?ですよ。エクセルのような、数値を入力すると、グラフを書くスクリプトを書きましたが、なかなか気に入っています(^^;

 なるほど、画像を自動生成するとは美しくてマンマシーンインターフェイスを考えると素晴らしいことです。商品価値も上がりますね。(^^)
是非、どこかで発表して下さい。盗ませて下さい。(^^);

>だから、他の色々な場所で還元できればと思っています。

 確かにそうですね。MLでは目まぐるしく話題が移り行き見失い勝ちです。ここOKWebでは、ゆっくり対応できそうですね。(^^) 居心地は良さそうです。(^^);

>お互い頑張りましょう。

 ありがとうございます。頑張りましょう。

投稿日時 - 2002-04-13 11:37:02

ANo.2

こんばんは。
まず最初にこれは回答ではなく、雑談です(^^;
# 分かりませんから。。。

>悩みが1つ無くなりました。ありがとうございます。(早計かな)

それはよかった!
役に立てて光栄です(^^)

>../configure --enable-jstring \
>--enable-mbregex --enable-iconv --with-pgsql \
>--enable-trans-sid --enable-track-vars

懐かしいjstringに目がいきましたが、後は問題ないようですね(笑)
そうか、4.0.5ですか・・・このバージョンまでjstringが必要だったんですね~
# 全然役に立たないただの感想です(^^;

こんな事を書いたら又消されるかもしれませんが、
「PHP4でカンタンWebDB構築ガイド」はPHP-USERS(ML)でもあまりいい評判は聞きませんね。。。
私の参考書はマンモス本です。最近青マンモスも発売になり、すぐに購入しました!

>kusukusuさまのご利用中の PHP4のバージョンと configure・・・

私は常に最新版を使います。今は4.1.2です。
ちょっと脇道にそれますし、ご存じかもしれませんが、4.1.0からかなり大きな仕様変更がありました。
俗に言うregister_globals問題です。
私もつい最近(青マンモスを読んでregister_globals=Onの危険性を知り)Offに取り組みました。
# PHP開発者は「過渡期なので今はまだregister_globals=Onも残すが、もうすぐになくす」
#と言っているのも原因です。
これ・・・はっきり言って死にました(^^;
「変数を初期化しなくてもOK」と言う仕様が変わり、コード変更がめちゃくちゃ大変でした!
今やっと終わり、他のアプリも変更しています・・・
Ujikiさんも、早めに取り組まないと、どつぼにはまりますよ。。
老婆心ながら・・・・
で、configureですが、私の場合、イントラネットorインターネットを利用した「販売管理、売掛管理」等をメインに作っています。
故に、pdfやpngを動的に生成するようなモジュールが多く含まれ、あまり参考にならないかもそれませんが・・・

./configure --with-pgsql --enable-track-vars \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-versioning --with-gd=/usr/local \
--with-png-dir=/usr/local/src \
--with-jpeg-dir=/usr/local/src \
--with-zlib-dir=/usr/local/src --with-ttf \
--enable-trans-sid --enable-mbstring \
--enable-mbstr-enc-trans --with-pdflib=/usr/local \
--enable-ftp \

長いですね(^^;

>NAMAZUやKAKASHIは現在は利用していませんが、将来的にはインストールしたいです。
これは後からextensionに入れてやればOKです。そちらの方が簡単だと思います。

>Apacheのバージョンはインターネット側のSSL版と同じバージョンにして
>おきたいので特にApacheのバージョンアップは考えていないのですが
私は新しいものが意味もなく好きです(笑)
故に、
openssl-0.9.6c
./config --prefix=/usr/local --openssldir=/usr/local/openssl -fPIC
mod_ssl-2.8.8-1.3.24
./configure --with-apache=../apache_1.3.24 \
--with-ssl=../openssl-0.9.6c --prefix=/usr/local/apache \
--enable-shared=ssl --enable-module=so \
--enable-rule=SHARED_CORE --enable-module=rewrite \
--enable-shared=rewrite
apache1.3.24
OPTIM="-O2" ./configure --enable-module=ssl --enable-module=so
とやっております。
#バージョンはご覧の通り最新版です(笑)

>PHP4と日本語化パッチのインストール情報
4.0.6以降は、全て国際化版です。
Ujikiさんが使われているバージョンまで、上記に気を付けなくてはならなかった
だけです。
上でも書きましたが、仕様が大きく変更になりました。
早く新しい方になれることをお勧めします。

長くなりました(^^;
それでは

投稿日時 - 2002-04-12 19:50:51

補足

こんばんは、お忙しい所、何度も申し訳なく存じます。ありがとうございます。
まず、「補足」に発言している点、ご容赦願います。次にレスを督促しているのでは決してありません。スレッドを締め切った場合に、「お礼」には書き込めるけれども、「補足」には書き込みが出来なくなるので、「補足」を利用しているだけです。気持ちは「お礼」欄です。(^^)

>私の参考書はマンモス本です。最近青マンモスも発売になり、すぐに購入しました!

 なるほど、早速、本屋に足を伸ばそうと思います。インパクトに感謝します。

># PHP開発者は「過渡期なので今はまだ>register_globals=Onも残すが、もうすぐになくす」
>#と言っているのも原因です。
>これ・・・はっきり言って死にました(^^;

 顧客の現在稼働中のシステムへの追加開発中ですので、バージョンアップは簡単には出来ないですね。(^^)
了解しました。手持ちの余ったPCに最新のPHPを早速インストールし、夢のような話しですが、PHPスクリプトをawkで(半)自動変換してしまうツールを考えて、一期に変更したいと思います。(出来るのかなあ~) (^^);
で、PHPソース類は当分は2本立て管理になりそうです。

>Ujikiさんも、早めに取り組まないと、どつぼにはまりますよ。。
>老婆心ながら・・・・
 :
>上でも書きましたが、仕様が大きく変更になりました。
>早く新しい方になれることをお勧めします。

 ご親切な警告に感謝致します。調査しますが、PHPスクリプトソース毎に、register_globals=On/Offを切り替える事を暫定的にも利用できる事を期待して、PHPソースの変更を積極的に考慮しようと考えます。まあ、PHPの開発者の苦労から考えますと… 我慢して汗しないと仕方が無いですよね。利用させていただいているわけですからね。(^^);

>pdfやpngを動的に生成するようなモジュールが多く含まれ、あまり参考にならないかもそれませんが・

 いえいえ、PDFは別マシーンで利用中です。そうですか、画像までハンドリングされてるとは、素晴らしいシステム開発をされておいでですね。是非、益々成功される事をお祈りいたします。

>これは後からextensionに入れてやればOKです。そちらの方が簡単だと思います。

 なるほど、明確な方向性に感謝します。

>私は常に最新版を使います。…

 そのポリシーには大いに賛成です。折角のLinuxのアプリケーションですから、積極的にバージョンアップしたいですね。弊害があったとしても。まあ、Linux関連の技術者には精神的な若さと言うのか、冒険心と言うのか、積極果敢な気持ちが大切です。お互いに頑張りましょう。エッセンスの数々、感謝します。NL2BRの小さな、小さな悩み(?)の発言に、新たなディレクションを見出せました。他、configureを例示していただきまして、とても参考になります。助かります。重ねて感謝いたします。

投稿日時 - 2002-04-12 20:55:04

あなたにオススメの質問