• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ダブルクォート文字などをフォームで送るとき)

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

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

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

  • ベストアンサー
  • 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