dポイントプレゼントキャンペーン実施中!

phpで、DBから取得した「Hello!! \n World!!!」という文字列を表示したところ。
「Hello!! \n World!!!」とそのまま表示されました。

いろいろ調べた結果、
$a = 'Hello!! \n World!!!';
echo nl2br($a);
とシングルクォーテーションで文字列を囲った場合と同じことになっているとわかりました。
しかし、DBから取得して$aに突っ込むまでの作業はFuelPHPというフレームワークでやっており、
じゃあダブルクォーテーションで囲っちゃえばいいじゃん、とはいかないのかなと思います。

私が考えているやれることは、
1.FuelPHPのcoreの部分を修正する
2.nl2br($a)をnl2br(str_replace('\n',"\n",$a))のように一手間加える
なのですが、気持ちがよくはありません。

もしかすると、
・FuelPHPのconfigの問題
・PHPやapache、DB(MySql)はたまたOSの何らかの設定の問題
なのかな、とは思いますが検討もつかない状況です。

誰か解決策をお持ちの方はいますでしょうか?

因みに、Webサーバーの環境は以下の通りです。

Windows7 HomePremium
apache 2.2.21
php 5.3.8
fuelPHP 1.1
MySql 5.5(文字セットはutf-8)

A 回答 (2件)

>ちなみに、「文字列として変換しないように」とはどういうことでしょうか?



\nと可視化できているということはデータをテーブルに投入するときに
\n(改行マーク)を'\n'という文字列に置き換えるような処理が
入っているはずです。(もしくは\nと手で書いているはずです)

極端なはなし
INSERT INTO hoge(data) values('Hello!!
World!!');
のように改行は改行のままで流し込んでやればいいでしょう。
    • good
    • 0

>DBから取得した「Hello!! \n World!!!」という文字列



DBから取り出した時点で'\n'になっているのですから

>nl2br($a)をnl2br(str_replace('\n',"\n",$a))のように一手間加える

が必要最小限の処理で、むしろ気持ちいい処理だと思いますが?
検討すべきはDBに投入する時点で文字列として変換しないようにすることです。

この回答への補足

私の中の迷いを記述し忘れていました。

>>nl2br($a)をnl2br(str_replace('\n',"\n",$a))のように一手間加える
>が必要最小限の処理で、むしろ気持ちいい処理だと思いますが?
確かにこれでいいといえばいいのですが、
google先生にたずねても、参考にした「FuelPHP入門」という本にもそのような一手間は書かれていませんでした。
ですので、何かのバージョンの違いやコンフィグの内容の相違があるのではないか、と考えました。
一手間加えるのは簡単なのですが、そもそもその必要がないのでは?ということです。

ちなみに、「文字列として変換しないように」とはどういうことでしょうか?

補足日時:2012/07/17 17:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!