• ベストアンサー

画像処理での文字の処理について

formのtextareaから文字を受け取り、その文字を画像に書き込むプログラムを作成しています。 処理手順は、 1.[a.php]にあるtextareaに文字を入力   <textarea name="intxt" rows="10" cols="30"></textarea> (FORMのmethodはPOST)    2.submitで値を送信し、[b.php]で処理   [a.php]:print "<img border='0' src='b.php?imgfile=$imgfile&txt=$txt'>";      [b.php]:$imgfile=$_GET['imgfile'];/*画像*/        $txt=$_GET['txt'];    /*入力文字*/        文字を画像に書き込むときに、  aaa  bbb という風に画像に書き込みたいのですが、処理をすると  aaabbb  となります。 そこで私が考えた方法は、改行コードで文字列を切り取り、【 $text=explode("\n",$txt); 】 for文で書き込むという方法でしているのですが、うまく文字列を切り取れません。 改行コードが間違っているのでしょうか? それとも、改行コードでは切り取れないのでしょうか? 検索をかけてみたり、他の質問を見てみたのですが、うまく出来ませんでした。 それと、日本語で文字列を渡すためにはどのような関数を使えばよいのでしょうか? マルチバイト文字列はrawurlencode()を噛まさねば渡すことが出来ないというのはわかったのですが、 どういう風に噛ませるのかわかりません。 いろいろと試したのですが、表示されませんでした。 他にも方法があるのでしょうか? 開発環境は、PHP5.2.5、Apache2.2、WindowsXPです。 よろしくお願いします。

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

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

image関数を使っているのですよね? imagestring()を使っていると想定しますが、これは改行などの制御コードを解釈しない仕様だったと記憶しています。 なので、 >そこで私が考えた方法は、改行コードで文字列を切り取り、【 $text=explode("\n",$txt); 】 >for文で書き込むという方法でしているのですが、うまく文字列を切り取れません。 とするのは正しい判断といえましょう。 が、windowsの場合は改行コードがCRLFなので\r\nで区切ると良いと思われます。 // でも\nで区切って上手くいかないのに\r\nで区切ろうとして上手くいくとは考えられない・・・ あまりお勧めしない最後の手段ですけども、<img>に記述する部分で <?php //初期化 $str = $_POST["intxt"]; //タグ排除 $str = htmlspecialchar($str); //<br />に変換 $str = nl2br($str); //urlencode $str = rawurlencode($str); //output echo "<img src='b.php?txt=" . $status ."' />"; ?> とし、受け取り側で <?php $text = explode("<br />",$txt); ?> とするのもまぁアリかもしれません。 ともあれ、$txtがどのようなバイトコードでb.phpに到達しているか確認してみると良いです。 unpack()関数が参考になるでしょう。 http://jp2.php.net/unpack 改行コードがどこかで潰れている可能性も否定は出来ません。 POSTされたデータを直にURLエンコードした場合、改行がきちんと%0D%0Aとなっているかも確認すると良いでしょう。

yukari87
質問者

お礼

回答ありがとうございます。 >あまりお勧めしない最後の手段ですけども・・・ この方法で書き込むことができました! 詳しい回答ありがとうございました。

その他の回答 (2)

  • tronbone
  • ベストアンサー率50% (1/2)
回答No.2

NO1の者です。 $txt = nl2br($_POST['txt']); を↓に訂正します。 $txt = nl2br($_GET['txt']); rawurlencode() に関しては『PHPマニュアル』を良く読んでみるとわかると思いますが 例として echo ' <a href="ttp://example.com/'.rawurlencode('*********').'"> '; のように出ていました。

yukari87
質問者

お礼

回答ありがとうございます。 nl2brを使うのですね! 参考になりました^^ ありがとうございます。

  • tronbone
  • ベストアンサー率50% (1/2)
回答No.1

>$txt=$_GET['txt']; 上記の部分を $txt = nl2br($_POST['txt']); にしてみると、いいかもしれません。