• ベストアンサー

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

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です。 よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • 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']); にしてみると、いいかもしれません。

関連するQ&A

  • 別のファイルへ値を受け渡す方法

    【index.php】というファイルで、画像のURLとテキストデータを【img.php】へ値を受け渡すプログラムを記述しています。 【index.php】では <form action="index.php" method="POST">  <textarea name="intxt" rows="10" cols="30"></textarea>  <input type="radio" name="image" value="4.jpg"> </form> <?php   $imgfile=$_POST['image'];   $text=$_POST['intxt'];   print "<img border='0' src='img.php?imgfile=$imgfile&text=$text'>"; ?> と記述し、 【img.php】ファイルで値を受け取るために、   $text=$_GET['text'];   $imgfile=$_GET['imgfile']; と記述しました。 しかし、値が受け渡されていません。  $text=$_POST['text'];  $imgfile=$_POST['imgfile']; でも試してみましたが、結果は同じく値が受け渡されていませんでした。 何か足りないのでしょうか? 開発環境は、PHP5.2.5、Apache2.2、WindowsXPです。 知恵をお貸しください。 お願いします。

    • ベストアンサー
    • PHP
  • マルチバイト文字を画像に書き込みたい

    いつもお世話になっています。 画像に文字を書き込むプログラムを作成中なのですが、 日本語を書き込もうとすると文字化けを起こしてしまいます。 文字は、EUC-JPで処理するようにしています。 【index.php】にHTMLでフォームから値(文字列やフォントなど)をとり、 【a.php】で画像に文字を書き込む処理をし、 【index.php】で作成した画像を表示させるプログラムです。 マルチバイト文字を送信する際に、 $text=rawurlencode($text);  【index.php】 をし、【a.php】では、   $text=$_GET['text'];   $text=rawurldecode($text); をして、   imagettftext($im, $fontsize, 0, 12, $fontsize+8, $color, $font, $text); 書き込みを行っています。 マルチバイト文字を送信する際にこの方法が出来ない場合、他に方法があるのでしょうか?? 開発環境は、Windows XP、PHP5.2.5,Apache2.2です。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 文字列を一定文字数で挿入もしくは、改行。

    文字列を一定文字数で挿入もしくは、改行する方法、 関数はあるでしょうか? たとえば、 あめんぼ、赤いなあいうえお を8文字ずつで改行したいのですが、 方法が分かりません。 あめんぼ、赤いな あいうえお 最初は、mb_substrで改行する文字を調べて 改行タグを入れれば、とたかをくくっていた んですが、同じ文字を入力されていたら、変な 所で改行されてしまうと、気がつきました。^^; 「あ=><br>あ」にすると、一文字目の”あ”も 指定されてしまって。 改行するデータは、常に変わり予想はできません。 FORMからの入力を想定しているので、最悪 <textarea wrap="hard">で送信時に強制改行しても いいかなーとは、思っていますが、PHPで処理できるで しょうか?

    • ベストアンサー
    • PHP
  • PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が

    PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が入力されていた場合の処理について分からない点があります。 POSTやGETから送信された日本語の値がどの時点で再び日本語に変換されているのかということです。 たとえば以下のようなphpファイルにブラウザからアクセスした場合、 <?php $static = $_GET["static"]; print $static; ?> <form method="GET"> <textarea name="static"> 静的 </textarea> <input type="submit" name="submit_button" value=" 送 信 " /> </form> ブラウザのアドレスバーには"?static=静的%0D%0A&submit_button=+送+信+"という文字列が表示されています。 この"%0D%0"というのは、URLエンコードされた文字列らしいのですが、上記のphpファイル上の"print $static;"部分の表示ではしっかりと日本語として表示されています。 私は上記のソース上のどこの部分でURLエンコードされた文字列が再び日本語として表示されるよう変換されているか分かりません。 何卒ご教授頂けますようお願い致します。

    • ベストアンサー
    • PHP
  • 改行コードが半角スペースになってしまいます

    もしかしたらカテゴリはphpかも知れません。 よろしくお願いします。 phpとMySQLでWEBアプリを作っています。html上のtextareaフォームに入力した文字列を、phpを使ってMySQLにINSERTします。この文字列には改行(CRLF)も含まれます。 それをSELECTで参照し表示させると、改行が半角スペースに変換されてしまいます。 phpMyAdminで見てみるとちゃんと改行が入っています。 つまり、格納の段階ではちゃんと改行コードが入っているんですが、取り出すときに変換されてしまうようです。 この場合、どのように対処すればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • Perlでの文字列処理について

    プログラム初心者です。 Perlで下記のような文字列処理のプログラムの書き方がわからず、質問させて頂きました。 【内容】 FILE_A.txtが「!」マークで区切られていて、「!」マークの下行の文字列をIPアドレスの右横に移動したものをFILE_B.txtに出力するという処理です。 「!」マークの下行の文字列の「name」は共通です。 -------------------------------------------- 【FILE_A.txt】 ! name abcdeLV 123.123.123.123 123.123.123.124 123.123.123.125 ! name fghijLV 10.10.10.11 10.10.10.12 10.10.10.13 10.10.10.15 10.10.10.16 ! -------------------------------------------- ↓ -------------------------------------------- 【FILE_B.txt】 123.123.123.123 abcdeLV 123.123.123.124 abcdeLV 123.123.123.125 abcdeLV 10.10.10.11 fghijLV 10.10.10.12 fghijLV 10.10.10.13 10.10.10.15 fghijLV 10.10.10.16 fghijLV -------------------------------------------- 上記のようなPerlでの処理を具体的に教えて頂ければうれしいです。 本サイトのようなものを利用するのが初めてですので、不手際があるかもしれませんが なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • テキストから複数の任意の文字列を含んだ行を抽出したいです

    cat test.txt | grep aaabbb とするとaaabbbを含んだ行を抜き出せるんですが、 aaabbbまたはcccdddという文字列を含んだ行を抜き出したいときにはどうすればいいでしょうか? どちらか一方もしくは両方を含んだ行を抜き出してほしいです。 ログを見る際に使いたいのでコマンド一つで出来ると助かります。

  • メールフォーム(Smarty)の改行について

    textareaに入力した文章がoutlookで受信するとどうしても 改行ではなく半角スペースになってしまいます。 (内容確認画面では正常に改行されて表示されます) 試しにYAHOOメールで受信してみたところ正常に改行されて表示されました。 outlookで受信した場合にも正常に改行された状態で受信したいのですがどのようにしたらいいのでしょうか? nl2br($_POST["msg"]);としてみたのですが結果変わらずです・・・ phpの改行コードはLFで文字コードはUTF-8Nです。 phpファイルのtextarea部分の読み込みは以下の通りです。 $form->addElement('textarea', 'msg', 'お問い合わせ内容', array('rows' => 8, 'cols' => 30,)); tplファイルには <th>■ {$form.msg.label}</th> <td>{$form.msg.html}</td>としています。

    • 締切済み
    • PHP
  • 画像処理中にプレグロスバーを表示させたい

    画像処理するプログラムを組んでいるのですが、処理に時間がかかるので、プレグロスバーを表示させたいと考えています。 <?php if($_POST["mode"]){ 画面B ~画像処理~ }else{ 画面A <form method="me.php"> ~実行ボタン~ <input type="hidden" name="mode" value="1"> </form> } 最初は画面Aが表示され、実行ボタンを押すとB画面へ移って画像処理、みたいな流れにしています。 プレグロスバーを実装するのに http://www.html5.jp/library/progress.html こちらのサイトのバーが良いかと思いました。 ところが、実際に画面Bに実装すると画面Aで画像処理を行い、画像処理が終わってから画面Bが表示されるため、まったくプレグロスバーの意味がないものになります。 解決する方法はないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エクセルの文字列の抽出方法について

    ★★エクセルの文字列の抽出方法について★★ 下記の「対象セルの内容」のような感じで1つのセルの中に複数行の文字列が入っているのですが、 下から3行とか4行とかを指定して文字列を抽出したいと考えています。 ■対象セルの内容 [改行] [改行] [改行] a/b/r1.php[改行] a/b/r2.php[改行] a/b/r3.php[改行] a/b/r4.php ■抽出したい値 a/b/r2.php[改行] a/b/r3.php[改行] a/b/r4.php 何かしらうまい方法はないでしょうか。 ご教授なにとぞよろしくお願いいたします。

専門家に質問してみよう