ダブルクォート文字などをフォームで送るとき

このQ&Aのポイント
  • フォームに<input name="txt_title" type="text" size="60">というテキストがあります。確認ボタンをおすと確認ページにSubmitされます。
  • <INPUT type="hidden" name="txt_title">を設置しているのですが、txt_titleに「"」とかを入力する場合、value="タイトル"あああ""と入ってしまい、登録するとき「タイトル」の文字までしか入ってきません。
  • いちおうHiddenにいれる文字は$string =~ s/"/"/g;で変換してから入れているのですが、どうしてでしょうか?またどうすればいいでしょうか。シングルクォートだけでなく、テキストエリアの改行文字の入れ方も教えてください。
回答を見る
  • ベストアンサー

ダブルクォート文字などをフォームで送るとき

フォームに <input name="txt_title" type="text" size="60"> というテキストがあります。 確認ボタンをおすと確認ページにSubmitされます。 確認ページに <INPUT type="hidden" name="txt_title"> を設置しているのですが、 txt_titleに「"」とかを入力する場合、 value="タイトル"あああ"" と入ってしまい、登録するとき「タイトル」の文字までしか入ってきません。 いちおうHiddenにいれる文字は $string =~ s/"/"/g; で変換してから入れているのですが、どうしてでしょうか?またどうすればいいでしょうか。 シングルクォートだけでなく、テキストエリアの改行文字の入れ方も教えてください。  

  • Perl
  • 回答数5
  • ありがとう数1

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.5

だいぶ日が経ってしまいましたが、なんだか的はずれな回答ばかり増やしていたようなので、もう一度実行チェックしました。 >$string = "<INPUT type=\"hidden\" name=\"txt_title\" value=\"$G_form- >param('txt_booktitle')\">\n"; もしかしてこの出力用文字列を作ってからすべての「"」に変換をかけていましたか?? やり方としては以下のように ### 受信データのみに変換をかける $value = $G_form- >param('txt_booktitle'); ## 1。必要なら文字コード変換 (以下はjcode.pl 利用の場合) jcode'convert(*value,'sjis'); ## 2。特殊文字対策 受信データをhtml出力するなら以下の4つは変換しておくのがよい $value =~ s/&/&amp;/g; $value =~ s/"/&quot;/g; $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; print "Content-Type: text/html\n\n"; print <<END_OF_HTML; -HTMLの中身- <form name="form" method="post" action="test.cgi"> <INPUT type="hidden" name="txt_title" value="$value"> -その他のformの中身- </form> END_OF_HTML

angelinaane
質問者

お礼

うまく動きました。 No2の方法をとったといいますか、変換のタイミングがおかしかったようです。 とりあえず特殊文字を変換してしまってからHIDDENに入れてしまえばいいのですよね? いっぱいレスいただいていたのに返事できなくてすみませんでした。 GOOからなぜかお知らせメールが来なかったのでレスされているのをしりませんでした。

その他の回答 (4)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.4

&amp;quot; ↓ &quot; (一応全角でも &quote;) ぼやき 自動変換されたりされなかったりするのはなぜなんだ?

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

>valueに"を入れるときは \" 済みません、これ間違いだったようです。 他で見たのを鵜呑みにして書いてしまいましたm(_ _)m。 &amp;quot; が正しいようですけど、最初にうまくいってなかったのはなぜかな? >hiddenのvalueには、&quot;ではいりません。 ページのソース表示をするとvalue属性内で&amp;quot;となっているものは、 送信時には、%22 →デコードすると " に戻りますので、 これを勘違いされていただけかも。 textフィールドで表示してみて得られる状態と同じものがhiddenでも送信時データになります。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

valueに"を入れるときは \" <input type="hedden" value="タイトル\"あああ\""> formをperlでprintするなら、\をエスケープされないよう''かq()でくくるか\\で出力 print q(<input type="hedden" value="タイトル\"あああ\"">); print qq(<input type="hedden" value="タイトル\\"${title}\\"">); textareaの改行は、以下のように改行されていればよいので <textarea> あa いb うc </textarea> perlでprintするなら \n こちらは\をエスケープさせないといけないので""かqq()でくくる print qq(<textarea>あa\nいb\nうc</textarea>);

angelinaane
質問者

補足

説明になっているかわからないのですが、現在こんなソースです。 G_form->param('txt_booktitle')部分を どんなふうにして変換すればいいのでしょうか? $string = "<INPUT type=\"hidden\" name=\"txt_title\" value=\"$G_form->param('txt_booktitle')\">\n"; print "Content-Type: text/html\n\n"; print <<END_OF_HTML; -HTMLの中身- <form name="form" method="post" action="test.cgi"> $string </form> END_OF_HTML

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

$string =~ s/"/"/g; ↓ $string =~ s/"//g;

angelinaane
質問者

補足

すみません。 自動変換されていました。 全角文字で書きますが、 $string =~ s/"/&quot;/g; のようにかいているのですが。 hiddenのvalueには、&quot;ではいりません。

関連するQ&A

  • ダブルクォート、シングルクォート、\について

    こんにちは。 PHPでメールフォームを作ったのですが、2つ問題点があります。 1.テキストフィールドにダブルクォートで文字を囲んで送信すると入力された情報が返されず、何も入力されていないメールが送られてきます。 2.シングルクォート、\をいれると前に\がついてしまいます。(こんなカンジ→\'\\)フォームはHTMLで作成しています。確認画面のフォームにstripcslashes($_POST[name])をかけておりブラウザ上だとシングルクォートと\は除去されているのですが、メールだと除去されてません。 ダブルクォート、シングルクォート、\が付いた文字列をPHP・HTMLにどのように記述すれば、メールにきちんと送られるようになるのでしょうか?

    • 締切済み
    • PHP
  • フォームの値をリンクで渡す方法

    ふつうはフォームで <input type = "text"> <input type = "hidden" name ="test1"> <input type = "hidden" name ="test2"> <input type = "hidden" name ="test3"> <input type = "hidden" name ="test2"> とやっていけばいくつものフォームの値を渡せますね。 今回はリンクにフォームの値を入れたいのです。 a href ="http://sig.com/win.cgi?text1=$text1&text2=$text2" test1はリンクの値。 text2がテキストボックスのフォームの値です。 どうやってtext2の値を上のハイパーリンクに入れられるでしょうか? やはりJAVASCRIPTを使う必要があるでしょうか? (他の質問で解決済み) フォームとリンクの値を同時にCGIに渡す方法を教えてください。 自分としては1つ1つ値を渡していくしかないか、と考えました。

    • ベストアンサー
    • Perl
  • ボタン別でフォームの送信先を変えたい

    同じ場所に3つある今のフォームを1つにまとめたいのですが、 「ラジオボタン」でやるのではなく「submitボタン」によって送信先の振り分けはできないのでしょうか? CGIなどを使って一旦クッションを置くのは問題ないです。何か参考になるサイトさんとかありましたら教えてください。 <form action="1.php" method="get" class="form" target="a" name="1"> <input type="hidden" name="s" value=90 /> <input type="hidden" name="t" value="e" /> <input type="text" name="moji" value="" size="8" /> <input type="submit" name="button" value="検索" /> </form> <form action="http://e.php" method="get" name="2" target="a"> <input type="hidden" name="test" value=et /> <input type="text" name="77" value="" size="8" /> <input type="submit" value="検索2" class="button" /> </form> <form action="http://8.cgi" method="get" target="a"> <input type="text" size="8" name="q" value="" /> <input type="submit" value="検索3" class="button" /> <input type="hidden" name="sut" value="JJ" /> </form>

    • ベストアンサー
    • CGI
  • アンケートフォーム複数ページ間のテキストフォームデータのの受け渡し

    こんにちわ、1ページ目の名前のテキストフォームに入力した内容のデータと2ページ目のメールアドレスのテキストフォームに入力したデータをのデータを確認画面で表示させたいのですがうまくできません。わらをもすがる思いでここに書きました。 1ページ目 名前を入力 2ページ目 メールアドレスを入力 3ページ目 確認画面 4ページ目 サンクスページ わたしが書いたソースは以下のとおりです。。 どうしてもデータをうまく確認画面にもっていくことができませんよろしければ詳しい方、アドバイスをお願いいたします。よろしくお願いします! ※ここの文字数制限が800文字なのでかなり省略化しています。 if ($FORM{'action'} eq "page2") {&page2;} elsif ($FORM{'action'} eq "") {&page1;} elsif ($FORM{'action'} eq "kakunin") {&kakunin;} elsif ($FORM{'action'} eq "kanryou") {&kanryou;} #1ページ目 sub page1{ print <<"EOF"; Content-type: text/html <html> <head> <meta content="text/html; charset=shift_jis"> </head> <body> <form method="post" action="$script"> □お名前(漢字)<br> <input type="text" size="12" name="name1" value="$FORM{'name1'}" > <input type="hidden" name="name1" value="$name1"> <input type="hidden" name="action" value="page2"> <input type="submit" value="次へ"> </form> </body> </html> EOF exit; } #2ページ目 sub page2{ 文字数制限のため省略 メールアドレス } #■フォームのデコード処理 sub decode{ 文字数制限のため省略 } #確認画面 sub kakunin{ 文字数制限のため省略 } #送信完了画面 sub kanryou{ 文字数制限のため省略 }

    • ベストアンサー
    • Perl
  • 入力に関して。

    以下のソースのようにテキストボックスを4つくらい並べて、最大入力文字数になったら、自動的に右のテキストボックスに入力できるようにすることはできるのでしょうか? <html> <head> <title></title> </head> <body> <form name="form1"> <input type="text" name="txt1" size="7" maxlength="3">. <input type="text" name="txt2" size="7" maxlength="3">. <input type="text" name="txt3" size="7" maxlength="3">. <input type="text" name="txt4" size="7" maxlength="3"> </form> </body> </html>

  • アンケートフォーム複数ページ間のテキストフォームデータのの受け渡し

    こんにちわ、1ページ目の名前のテキストフォームに入力した内容のデータと2ページ目のメールアドレスのテキストフォームに入力したデータをのデータを確認画面で表示させたいのですがうまくできません。わらをもすがる思いでここに書きました。 1ページ目 名前を入力 2ページ目 メールアドレスを入力 3ページ目 確認画面 4ページ目 サンクスページ わたしが書いたソースは以下のとおりです。。 どうしてもデータをうまく確認画面にもっていくことができませんよろしければ詳しい方、アドバイスをお願いいたします。よろしくお願いします! ※ここの文字数制限が800文字なのでかなり省略化しています。 if ($FORM{'action'} eq "page2") {&page2;} elsif ($FORM{'action'} eq "") {&page1;} elsif ($FORM{'action'} eq "kakunin") {&kakunin;} elsif ($FORM{'action'} eq "kanryou") {&kanryou;} #1ページ目 sub page1{ print <<"EOF"; Content-type: text/html <html> <head> <meta content="text/html; charset=shift_jis"> </head> <body> <form method="post" action="$script"> □お名前(漢字)<br> <input type="text" size="12" name="name1" value="$FORM{'name1'}" > <input type="hidden" name="name1" value="$name1"> <input type="hidden" name="action" value="page2"> <input type="submit" value="次へ"> </form> </body> </html> EOF exit; } #2ページ目 sub page2{ 文字数制限のため省略 メールアドレス } #■フォームのデコード処理 sub decode{ 文字数制限のため省略 } #確認画面 sub kakunin{ 文字数制限のため省略 } #送信完了画面 sub kanryou{ 文字数制限のため省略 }

    • ベストアンサー
    • CGI
  • フォームのレイアウト

    以下のようなフォームを作成しましたが、検索ボタンの下が妙に余っているのです。 これを上側と同じようにくっつけたいのですが、どうしたらよいでしょうか? よろしくお願いします。  <table border="1" width="200" border="0" cellspacing="0" cellpadding="2"> <tr><td> <div align="center" valign="middle"> <form method="get" action="url" target="_blank"> <input name="sitem" type="text" id="inputbox" size="20"><BR> <input name="Submit" type="submit" id="inputsubm" value="検索"> <input type="hidden" name="sv" value="6"> <input type="hidden" name="sid" value="12345"> <input type="hidden" name="su" value="bbb"> <input type="hidden" name="sn" value="aaa"> <input type="hidden" name="v" value="3"> </form></div> </td></tr></table>

    • ベストアンサー
    • HTML
  • フォームで送った文字がおかしくなる

     フォームから文字を記入して、送信ボタンを押すと次のページでその文字が表示されるという初歩的なプログラムをつくっています。しかし、フォームからPOSTでデータを送る場合、ある特定の一文字の漢字だけを記入して送信ボタンを押すと正常に表示されません。 例えば、「卒業」だと正常に表示されるのに「卒」だと「'」になってしまい、他にも「文」や「動」を一文字だけ記入すると、何も表示されません。ひらがなやカタカナ、複数文字の場合は全て正常です。原因が分からなくて困っています。 a.php (入力フォーム) <HTML> <HEAD> <TITLE>テキスト送信のテスト </TITLE> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> </HEAD> <BODY> <FORM method="POST" action="view.php"> 入力してください: <INPUT type="text" name="name"> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> view.php (表示するphpファイル) <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <?php print $_POST["name"]; ?> </BODY> </HTML> どこか間違いがあるでしょうか? a.phpとview.phpは両方とも日本語(EUC)改行=LFで保存しています。 phpのバージョンは5.1.1です。よろしくお願いします。

    • ベストアンサー
    • PHP
  • メールフォーム設定について

    HP初心者です。メールフォーム作成について質問させていただきます。 現在 http://sitemix.jp/ の提供している無料CGIサービスを利用しており、パスは/usr/lib/sendmail とのことなのですが、下記のようなソースを書いてもうまく送信できず、エラーになってしまいます。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>無題ドキュメント</title> </head> <body> <form name="form1" method="post" action="/usr/lib/sendmail"> <p> 名前 <input type="text" name="textfield"> <INPUT TYPE="hidden" NAME="endmail" VALUE="thanks.htm"> <input type="hidden" name="tomail" value="メールアドレス"> <input type="hidden" name="submail" value="mailform"> </p> <p><br> <input type="submit" name="Submit" value="送信"> </p> </form> </body> </html> どこか間違っている場所などあればお教えください。どうぞよろしくお願いいたします。

    • 締切済み
    • CGI
  • Dreamweaverでスニペットを利用してタグを挿入すると・・・

    CGIのコードをスニペットで挿入していくと、たとえば <input type="hidden" name="code"・・・・・ <input type="hidden" name="back"・・・・・ <input type="hidden" text" name="num"・・・・・ <input type="submit"・・・・・ を、コピーすると、 <input type="hidden" name="code2"・・・・・ <input type="hidden" name="back2"・・・・・ <input type="hidden" text" name="num2"・・・・・ <input type="submit2"・・・・・ と2という尾ひれが付いてしまいます。 もう一回コピーすると、今度は3がそれぞれについてしまいます。 どこの設定を直せば、この数字がつかないようになりますか。 よろしくお願いします。(初心者です。)

専門家に質問してみよう