- ベストアンサー
ダブルクォート文字などをフォームで送るとき
- フォームに<input name="txt_title" type="text" size="60">というテキストがあります。確認ボタンをおすと確認ページにSubmitされます。
- <INPUT type="hidden" name="txt_title">を設置しているのですが、txt_titleに「"」とかを入力する場合、value="タイトル"あああ""と入ってしまい、登録するとき「タイトル」の文字までしか入ってきません。
- いちおうHiddenにいれる文字は$string =~ s/"/"/g;で変換してから入れているのですが、どうしてでしょうか?またどうすればいいでしょうか。シングルクォートだけでなく、テキストエリアの改行文字の入れ方も教えてください。
- みんなの回答 (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/&/&/g; $value =~ s/"/"/g; $value =~ s/</</g; $value =~ s/>/>/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
その他の回答 (4)
- hrm_mmm
- ベストアンサー率63% (292/459)
&quot; ↓ " (一応全角でも &quote;) ぼやき 自動変換されたりされなかったりするのはなぜなんだ?
- hrm_mmm
- ベストアンサー率63% (292/459)
>valueに"を入れるときは \" 済みません、これ間違いだったようです。 他で見たのを鵜呑みにして書いてしまいましたm(_ _)m。 &quot; が正しいようですけど、最初にうまくいってなかったのはなぜかな? >hiddenのvalueには、&quot;ではいりません。 ページのソース表示をするとvalue属性内で&quot;となっているものは、 送信時には、%22 →デコードすると " に戻りますので、 これを勘違いされていただけかも。 textフィールドで表示してみて得られる状態と同じものがhiddenでも送信時データになります。
- hrm_mmm
- ベストアンサー率63% (292/459)
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>);
補足
説明になっているかわからないのですが、現在こんなソースです。 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)
$string =~ s/"/"/g; ↓ $string =~ s/"//g;
補足
すみません。 自動変換されていました。 全角文字で書きますが、 $string =~ s/"/&quot;/g; のようにかいているのですが。 hiddenのvalueには、&quot;ではいりません。
お礼
うまく動きました。 No2の方法をとったといいますか、変換のタイミングがおかしかったようです。 とりあえず特殊文字を変換してしまってからHIDDENに入れてしまえばいいのですよね? いっぱいレスいただいていたのに返事できなくてすみませんでした。 GOOからなぜかお知らせメールが来なかったのでレスされているのをしりませんでした。