アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 0
この回答へのお礼

うまく動きました。
No2の方法をとったといいますか、変換のタイミングがおかしかったようです。
とりあえず特殊文字を変換してしまってからHIDDENに入れてしまえばいいのですよね?

いっぱいレスいただいていたのに返事できなくてすみませんでした。
GOOからなぜかお知らせメールが来なかったのでレスされているのをしりませんでした。

お礼日時:2005/10/20 15:11

&amp;quot;



&quot; (一応全角でも &quote;)

ぼやき
自動変換されたりされなかったりするのはなぜなんだ?
    • good
    • 0

>valueに"を入れるときは \"


済みません、これ間違いだったようです。
他で見たのを鵜呑みにして書いてしまいましたm(_ _)m。
&amp;quot; が正しいようですけど、最初にうまくいってなかったのはなぜかな?

>hiddenのvalueには、&quot;ではいりません。
ページのソース表示をするとvalue属性内で&amp;quot;となっているものは、
送信時には、%22 →デコードすると " に戻りますので、
これを勘違いされていただけかも。
textフィールドで表示してみて得られる状態と同じものがhiddenでも送信時データになります。
    • good
    • 0

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

補足日時:2005/10/07 18:30
    • good
    • 0

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



$string =~ s/"//g;

この回答への補足

すみません。
自動変換されていました。

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

補足日時:2005/10/06 20:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!