• ベストアンサー

フォームの入力値を登録語に置換して表示する方法を教えてください

PHPでフォームに入力された漢字を一字ずつ 別ファイルに用意した登録文字に置換して表示するには どのようにしたらよいでしょうか。 (サンプルを提示できなくてすみません)

noname#184731
noname#184731
  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • manimani2
  • ベストアンサー率70% (12/17)
回答No.1

こんにちは。 *「別ファイル」というのがどんな形式なのかによって、その部分のコードは変わりますし、ちょっと質問の意味合いもわかりにくい所がありますので参考程度にご覧ください。 例えば別ファイルというのが何でもよく、「この文字が入っていたら、この文字へ置き換える」というのが、予めpupuaさんの中で決まっているのでしたら、「,(カンマ)」で変換前と変換後の文字を区切ったCSVファイルを用意し、 [moji_data.csv] 夏,冬 甘,辛 高,低 ・ ・ ・ というように記載していきます。(上の例だと最終的に「『夏』という字があったら、『冬』に置き換える」「『甘』という字があったら、『辛』に置き換える」となるように考えています。) そして、コードとしては.... [okikae.php] <?php //フォームからのデータを受け取ります。 $str = $_POST['str']; //「別ファイル」(ここではCSVと仮定)の読み込み準備 $filename = "./moji.csv"; $row=0; $data = array(); //CSVファイルの中身を読みながら、該当する漢字が含まれていれば置き換えていく。 $handle = fopen($filename, "r"); while (($tmp = fgetcsv($handle, 1000, ",")) !== FALSE) { $data[$row]["before"] = $tmp[0]; $data[$row]["after"] = $tmp[1]; $str = mb_ereg_replace($data[$row]["before"], $data[$row]["after"], $str); } //結果を表示 print $str; ?> このCSVの内容でいくと、フォームから「夏は甘い」と打ち込むと、結果は「冬は辛い」と表示されるはずです。お試しあれ。

noname#184731
質問者

お礼

お答えありがとうございます。 投稿後、丸投げは×ということを知りあきらめていました。 (すみませんでした) さっそく、フォームページを作成し、 <form action="./okikae.php" method="post"> <input type="text"> <input type="submit" value="送信"> </form> からアクセスすると、正規表現がなんとか・・のWarningが表示されます↓。 Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: premature end of regular expression in /・・ 日本語も英字も同じ結果です。 mb_ereg_replace()について検索してみたのですが解決できませんでした。 あと少しで望んでいたことができそうなので、できればアドバイスをお願いします。 サーバー(xrea)のせいでしょうか?

その他の回答 (2)

  • manimani2
  • ベストアンサー率70% (12/17)
回答No.3

念のためという意味を込めて、一つ一つ確認をしていってください。 ■コンパイルエラーについて 本当にCSVファイルはUTF-8になっているかどうか。TeraPADの設定がおかしくないかもう一度確認等。(一度、全部EUC-JPで試してみてもいいかもしれません) ■夏だけ変換されないことについて コードをいじっていませんか?CSVは1行ごとに読みこんでいき、カンマの部分で切り分けています。一行目の「夏」だけ変換されないのであれば、一行目を読み込めていないのかもしれません。コード内の $data[$row]["before"] = $tmp[0]; $data[$row]["after"] = $tmp[1]; を、誤って $data[$row]["before"] = $tmp[1]; $data[$row]["after"] = $tmp[2]; としていないでしょうか?念のため確認してください。配列は0からスタートします。 あと、一度ためしにCSVで「"(ダブルクォーテーション)」を入れてみてください。 [csv] "夏","冬" というようにです。私の環境では先のサンプルコードで正常に作動しましたので、これ以上何とも言えませんが(ちなみにApach2)、可能であれば他のサーバーや環境で動作を確認し、全ての環境で出現するエラーなのか、それとも、今使っている環境により発生しているものなのかを考えてみてください。 その上で、エラーの出るコードと使っている環境を掲示し、助けを求めれば解決できるかもしれません。

noname#184731
質問者

お礼

お答えありがとうございました。 以下、アドバイスいただいた事項です。 ・TeraPAD以外にも、KutoCsvEditorでUTF-8保存を確認 ・SHIFT-JIS・EUC・UTF-8のうち、UTF-8のみOK(改行コードはWin用CR+LF) ・csvファイルの先頭行を空白にすると「夏」が「冬に」置換される(コードは変更していません) ・ダブルクォーテーションではコンパイルエラー発生。何回か再読み込みすると表示される場合があるが、無置換 ・他のサーバーや環境での動作確認は残念ながらできない状況です 現況では時々コンパイルエラーが生じますが、csvファイルの内容や更新時の保存形式に問題があるようです。 今後、もっといろいろ勉強しながら検討してみたいと思います。 本当にご親切なお答えありがとうございました。

  • manimani2
  • ベストアンサー率70% (12/17)
回答No.2

うーん、文字コードがらみの問題だと思うのですが、どうなんでしょう・・・。 とりあえず、フォーム部分に「name="str"」を入れていただき、 <input type="text" name="str"> とした上で(ただの転記ミスかな)、日本語の文字コードを見返してみてください。できればShift_JISは避け、EUCかUTF-8で全て揃えてみてください。Shift_JISでは一部の漢字がPHP内でそのまま使えませんので・・・。ちなみに、「全て揃える」というのは、CSV、PHP、HTMLの3つの事です。 ちなみにこのエラーについて 参考になる一文がありましたので、URLを入れておきますね。 http://www.exist.net/blog/2008/05/warning_mbregex_compile_err_pr.html http://php.benscom.com/manual/ja/function.mb-regex-encoding.php

noname#184731
質問者

お礼

度々すみません。formのname="str"が抜けていました。 おかげさまで、各ファイルの文字コードUTF-8でコンパイルエラーは解消しました。 ただ、moji_data.csvが 夏,冬(※夏は入力パターンをいろいろ変えても置換されません) 甘,辛 高,低 のままだと問題ないんですが、 csvファイルに他の語句を追加するとコンパイルエラーが起こります。 (Tera PadからUTF-8でファイルを開き、語句を追加後UTF-8で上書き保存) 念のため、 //結果を表示の箇所で、 mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); mb_regex_encoding(mb_internal_encoding()); print $str; をそれぞれ試してみましたが、結果は同じです。

関連するQ&A

  • 会員登録フォームの作り方について

    今会員登録フォームを作っています。 流れとしては フォームの表示 ↓ 登録内容の確認画面の表示 ↓ 修正 or 登録 にしようと思っています。 今これらの動作を全てひとつのファイルで作ろうとしていたのですが、かなり複雑なものになってしまいました。 このようなシステムを作る場合、いくつかのファイルに分けて書いたほうが良いと思うのですが、どのように分ければいいでしょうか? フォームの表示をHYMLで。 内容処理をPHPで。 その後の確認ページはリダイレクトを使って一度HTMLファイルに飛ばしたほうがいいのでしょうか?それともPHPで表示したほうがいいのでしょうか?

    • 締切済み
    • PHP
  • 1つのphpファイルで、入力フォーム、チェック、Insertまで全て済ませられませんか

    PHP4.4.4+MySQL4.0.26 PHPの入門書に、form.html から、update文を含むPHPにPOSTする 掲示板サンプルがあるのですが、これにある入力チェックサンプルですと、 別画面に遷移して(例えば投稿者名は)「全角10文字以下にして」、とか メッセージを表示します。そうではなく、 値を入力   ↓ 登録ボタン押下   ↓問題なしなら     ↓問題あるなら INSERT文を実行    問題ある【フォームの脇に】「10文字以下で」と表示 のように1つのPHPファイルで全てを済ませたいのですが、可能でしょうか。 下記サンプルで、update.phpのところを<?= $PHP_SELF ?>にして、 <html> <body> <form method="post" action="update.php"> 投稿者名<input type="text" name="name" value=""> <input type="submit" name="reg" value="登録"> </form> </body> </html> 投稿者名の脇に if (strlen($name) == 0) {   $errmsg .= "回答者名が入力されていません。<br>"; } print $errmsg; みたいなものを仕込めばよさそうですが、 (1) これを登録ボタン押下時だけ動作させなければだめですよね? (初めに表示するときにチェックにHITしてしまうでしょうから) それをどうしたらいいかわかりません。 (2) ↑が克服できたとしても、問題がなければSQLでINSERT or UPDATEを かけなければならないですが、POST先が$PHP_SELFだと、永久にUPDATEが かからず、入力チェックばかりが無限ループしてしまうと思うのですけど。 (3) それと、Insert ot Updateがかかったら「ありがとう」を出して、別画面に リダイレクトしたいです。 以上の極めてシンプルなもので結構ですので、サンプルをご教示いただけませんか

    • ベストアンサー
    • PHP
  • ユーザーフォームのキャプションに中国語を表示したい

    VBAのユーザーフォームのキャプション(タイトル)に中国語を表示する方法が分かりません。 VBEではコードに中国語の簡体字を入力できないので、ワークシートに中国語を入力しておいて、それをキャプションに表示させたいです。 ラベルのTextやコマンドボタンのCaptionにはこの方法で簡体字を表示できるのですが、ユーザーフォームのCaptionでは?に置換されてしまいます。

  • PHP 入力フォームにあらかじめ文字を入れておく

    PHPプログラミングをしております。 入力フォームを作成しているのですが、前のページで入力し、受け取った内容をもう一度表示させたいのです。 入力フォームにあらかじめ文字を入れておくのは、フォームタグに value="文字" をつけたせば良いのはわかったのですが、 今回文字を$text = $_POST['name']; という形で受け取っています。 入力フォームにあらかじめこの受け取った$text を表示させるにはどうすれば良いのでしょうか。

    • ベストアンサー
    • PHP
  • 中国語入力フォームの作り方。

    中国語入力可のWEBフォームに入力された文字列を 日本語フォントで示せる独自の管理コードに置き換えたいのですが (1)中国語入力を受け付ける入力フォームをつくるには? (2)入力された中国フォントで書かれた文字を日本語フォント  で示せる管理コードに置換え。 (2)もしくは(1)もPHP等のサーバサイドプログラムを使うのかもしれ ませんが上記プロセスしか思いつきません。 実現するための、やり方や手掛かりになる情報をご存知の方 ご教授意ただけませんでしょうか? 例、 你好←この中国語フォントで書かれた中国漢字を、 ↓↓ 中国語挨拶1←このように、日本語の管理コードに書き換えます。

    • ベストアンサー
    • HTML
  • PHPでフォームに自動入力

    PHP初心者です。 (1)フォームに手入力しsubmit (2)手入力の内容をファイルに保管 (3)よそのサーバのフォームを開きユーザ名/パスワードを入力しsubmit (4)パスワード入力後に展開されるフォーム(https)に(1)の手入力の内容を入力しsubmit (5)"(4)"でsubmitした結果で次に表示するフォームを決定したい  submitした結果はフォームに正常/エラーが表示されます 自サーバのWebフォームに入力された内容を他のサーバに反映したい。 サーバへの反映結果で次処理を変えたい。 他のサーバに反映させる手段はWebの入力フォームのみとなっています。 (3)(4)(5)をサーバで動作するPHPで自動的(トリガーは(1))に行いたいです。 (3)(4)(5)の実装方法をどなたかご伝授いただけないでしょうか。 サンプルのソースがあればありがたいです。 linuxサーバ(Fedora) PHP 5 質問内容が大きすぎ申し訳ないですが伝授いただけないでしょうか。

    • 締切済み
    • PHP
  • htmlの入力フォームからphpに値を渡しphpから画像ファイルが組み込まれたhtmlを生成する方法について

    イメージとしては脳内メーカーの様に、入力された文字列を画像に置き換えて、 生成されたhtmlに画像の組み込みを行いたいのですが上手くいきません。 基礎的な理解が低くて申し訳ないのですが、 やりたい事は以下のとおりです。 (1)「入力.html」ファイルのインプットフォームに文字情報を入力。 (2)入力した文字情報を「処理.php」ファイルに送信。 (3)「処理.php」ファイルで入力された文字列を画像ファイルに置き換える。⇒「画像.jpg」を生成。 (4)生成された「画像.jpg」を「出力.html」ファイルに組み込み、「出力.html」を表示。 (1)(2)(3)の工程までは作成できたのですが、生成した画像を別のhtmlファイルに組み込んで表示させる方法が分かりません。 <IMG src="~.php?val=XXX">といった形でhtmlに組み込むことができるのはわかっているのですが、、、、、 セッション変数を使わないとだめなのでしょうか?

    • 締切済み
    • PHP
  • 入力フォームに打ち込んだはずの日本語が表示されません

    windowsXPを使っているのですが検索サイトや入力フォームなどで全角で日本語を打ち込んでいるのに何も表示されない時があります。 全角/半角を押して切り替えればローマ字なら表示されます。 一度ウィンドウを閉じれば改善することもあるのですが、閉じられない状況の時はアドレス欄に文字を打ちそれをコピペして対応しています。 対策を教えて頂けるとありがたいです。

  • 入力フォームに文字を入れると消える文字

    よく名前やメールアドレスを入力するフォームがありますよね。 あれでクリックすると最初に表示されてる文字(「お名前」や「メールアドレスなど」)が消えるjavascriptのサンプルはたくさん見かけるのですが、 一文字目を入力した時に消えるサンプルってどこかにありませんか? かっこいいのでサイトに実装したいのですが。

  • フォーム入力

    お世話になります。 現在PHPをUTF-8で作成しております。 UTF-8で作成したPHP(HTML)のフォームより日本語を入力してsubmitしたとき、入力値を何も加工せずに$_POST['inputのname']で表示するときちんと文字化けせずにUTF-8で表示されているようです。 この場合、mb_encoding の関数を使用する必要はありませんよね?? また、 入力値をhtmlentities($入力値,ENT_QUOTES,'UTF-8')としてみて、このままだと日本語が入力された場合表示する文字列は文字化けしてしまうので、表示する前にhtml_entity_decode($入力値)でデコードしています。 この場合だとhtmlentitiesは特に使用する必要はないのでしょうか? エンコード→なんらかの処理→デコードとしているのですが、なんとなく必要ない気もしてきてしまいました。 文字コードについては自分なりに勉強したつもりですが、PHP内部でどのような処理が行われるかなどはよく理解できていないので、どうかご教授ください。 よろしくお願いいたしす。

    • ベストアンサー
    • PHP

専門家に質問してみよう