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

myshop.cgiという、フリーのcgiを使いたくて、超初心者なりに色々
調べながらもなんとか思い通りに出来てきたんですが、一つだけ
どうしても自分では解決できなくて、困ってます。
enterキーでは改行できず、<BR>でしか改行できないテキストエリア内に、
ある文章をコピペしたいんですが、コピペした後に、いちいち<BR>を
入れるのが面倒なんで、enterキーで改行できるようにしたいんです。
しかし、どこをどういじればいいのかさっぱりわからなくて・・・。
とりあえず悩んでる付近のコードを載せておきます。
超初心者です!よろしくお願いします!
解決したいテキストエリアは、「サイトの紹介文」を入力するとこです。
-------------------------------------------------------------
print <<"EOF";
</select>$nini</td>
</tr>
<tr>
<td>カテゴリ3 <select name="ct3">
<option value="">選択しない</optin>
EOF

if ($use_sub) {
foreach (0 .. $#cates) {

@SUB = split(/\s+/, $subct[$_]);
$i=0;
foreach $j (@SUB) {
print qq( <option value="$_\,$i">$cates[$_] &raquo; $j</option>\n);
$i++;
}
}
}

if (!$print_url) { $nourl = qq(<span style="color:red;">現在非表\示に設定されています。</span> ); }

print <<'EOF';
</select>$nini</td>
</tr>
<tr>
<td>サイトタイトル <small>(タグ利用可\能\ / 同じECサイトのテキスト広告が効果的)</small><br>
<input type="text" name="tl" size="68"></td>
<tr>
<tr>
<td>バナーのHTMLコード <small>(アフィリエイト仲介サイトからコピー&amp;ペーストして下さい。)</small><br>
<textarea name="code" cols="54" rows="8"></textarea></td>
</tr>
<tr>
<td>サイトの紹介文 <small>(タグ利用可\能\ / 但し改行は反映されないので<span style="font-weight:bold;">&lt;br&gt;を使用</span>して下さい。)</small><br>
<textarea name="msg" cols="54" rows="20"><BR><BR><BR><BR></textarea></td>
</tr>
<tr>
<td>価格 <small>(タグも利用可\能\)</small><br>
<input type="text" name="url" size="68"></td>
<tr>
<tr>
<td>サイトに関係の深いキーワード <small>(任意。検索で使用、5個までで最大文字数は20文字。)<br>
<input size="14" type="text" name="key1" maxlength="20">
<input size="14" type="text" name="key2" maxlength="20">
<input size="14" type="text" name="key3" maxlength="20">
<input size="14" type="text" name="key4" maxlength="20">
<input size="14" type="text" name="key5" maxlength="20"></td>
</tr>
<tr>
<td>サイト紹介文の位置<br>
<input type="radio" name="line" value="0" id="bot" checked><label for="bot">バナーの下</label>
<input type="radio" name="line" value="1" id="sid"><label for="sid">バナーの横</label></td>
</tr>
<tr>
<td>オススメマーク<br>
<input type="radio" name="rec" value="0" id="ron" checked><label for="ron">付けない</label>
<input type="radio" name="rec" value="1" id="rof"><label for="rof">付ける</label></td>
</tr>
<tr>
<td>表\示状態 (非アクティブにチェックを入れると一覧には表\示されません。)<br>
<input type="checkbox" name="no_act" value="1" id="nact"><label for="nact">非アクティブにする</label></td>
</tr>
<tr>
<td align="center"><br>
<input type="submit" value=" 登録する "><input type="reset" value="リセット">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
EOF
exit;

A 回答 (3件)

サブルーチン decode の


 $in{'code'} =~ s/\r\n//g;
 $in{'code'} =~ s/\r//g;
 $in{'code'} =~ s/\n//g;
 $in{'msg'} =~ s/\r\n//g;
 $in{'msg'} =~ s/\r//g;
 $in{'msg'} =~ s/\n//g;
ですべての改行文字を削除していますから、ここを
 $in{'code'} =~ s/\r\n/<br>/g;
 $in{'code'} =~ s/\r/<br>/g;
 $in{'code'} =~ s/\n/<br>/g;
 $in{'msg'} =~ s/\r\n/<br>/g;
 $in{'msg'} =~ s/\r/<br>/g;
 $in{'msg'} =~ s/\n/<br>/g;
にすれば、とりあえずご希望は叶うでしょう。
    • good
    • 0
この回答へのお礼

キャ~~~!!できましたぁ~~~゜+。ヤッタァ★(o゜∀`从'∀゜o)★ヤッタァ。+゜
ありがとうございます~~~~(@^▽^@)
私ももしかしたら・・って思って似たような事はしてたんですが、
違う場所でやってました(^_^;)
本当にありがとうございましたぁ~~~~!!

お礼日時:2009/12/02 12:51

前回答の、WindowsOSマシンからは「%0A%0D」、MacOSマシンからは「%0A」、UNIX系OSマシンからは「%0D」にエンコードされて送ってきます。


は、WindowsOSマシンからは「%0D%0A」、MacOSマシンからは「%0D」、UNIX系OSマシンからは「%0A」にエンコードされて送ってきます。
の間違いでした。

ところで、補足内容から推測すると、フォーム受信データのパースには何かのライブラリを使っているようですから、テキストエリアに入力された改行は、perlの改行文字「\n」に変換されているはずです。
そうだとすれば、

unshift(@lines,"$no<>$in{'ct1'}<>$in{'ct2'}<>$in{'ct3'}<>$in{'tl'}<>$in{'code'}<>$in{'msg'}<>$in{'url'}<>$date<>$times<>$in{'key1'}<>$in{'key2'}<>$in{'key3'}<>$in{'key4'}<>$in{'key5'}<>$in{'rec'}<>$in{'line'}<>$in{'no_act'}<>\n");
の前に、

$in{'code'}=~s/\n/<br>/g;
$in{'msg'}=~s/\n/<br>/g;
を挿入すれば良いと思います。

この回答への補足

ありがとうございます!
早速、アドバイス通りやってみたんですが、何も変わりなかったです。゜(゜´ω`゜)゜。
私が何か間違ってるのかもしれませんね・・。
それで、全てのcgiコードを見てもらった方がいいかと思って、
cgiをテキストで保存してサーバーにアップしたんで、
もし良かったら、見てもらえませんか?
  ↓  ↓  ↓
http://shufumama.chu.jp/myshop.txt

eyterキーで改行させないように設定されてるんでしょうか?
それを解除しないといけないのかな~?
と思って、自分なりに色々調べたりしてるんですが、
どうしてもまだわからなくて・・。

まさに、今書いてるこのテキストフォームのようにenterキーで
改行したいです~~。゜(●'ω'o)゜。

よろしくお願いします!

補足日時:2009/12/02 11:43
    • good
    • 0

フォームのテキストエリアに入力された改行(<br>ではなく実際の改行)は、デフォルトのenctypeの場合、WindowsOSマシンからは「%0A%0D」、MacOSマシンからは「%0A」、UNIX系OSマシンからは「%0D」にエンコードされて送ってきます。


ですから、CGIスクリプトのフォーム受信データをパースするところで、この改行コードを「<br>\n」に変換してやれば良いのです。

この回答への補足

アドバイスありがとうございます!!
超初心者なりに色々調べてて、なんとなくそうなのかな~?とは
思ってましたが、具体的にどういう風にタグ?を書けばいいのか
どの場所に書くのがいいのかが、いまいちわからなくて・・(^_^;)

なんとなくこの辺りかな?と思うとこなんですが、違いますか?
↓  ↓  ↓
-----------------------------------------------------
# 新規登録の場合
} else {
# 時間取得
&get_time;

($num,$ct1,$ct2,$ct3,$tl,$code,$msg,$url,$dt,$tm,$k1,$k2,$k3,$k4,$k5,$rec,$line,$no_act) = split(/<>/, $lines[0]);
$no = $num + 1;
$dt2 = $date;

unshift(@lines,"$no<>$in{'ct1'}<>$in{'ct2'}<>$in{'ct3'}<>$in{'tl'}<>$in{'code'}<>$in{'msg'}<>$in{'url'}<>$date<>$times<>$in{'key1'}<>$in{'key2'}<>$in{'key3'}<>$in{'key4'}<>$in{'key5'}<>$in{'rec'}<>$in{'line'}<>$in{'no_act'}<>\n");
open(OUT,">$logfile") || &error("ファイルを開けません &raquo; $logfile","lock");
print OUT @lines;
close(OUT);
}

# 登録完了メッセージ
&header;

if ($in{'edit_flag'} eq "true") { $comp = "修正"; }
else { $comp = "登録"; }

if ($in{'rec'} == 1) { $tl_color = $rec_color; } else { $tl_color = $mn_color }

print <<"EOF";
<div style="text-align:center;">
<p><strong style="color:$bd_color;">以下の内容で$comp完了しました。</strong></p>
EOF
--------------------------------------------------------
この辺で合ってるとすれば、具体的にどこにどのように書けばいいのか
教えて頂けると嬉しいんですが・・・。

本当にチンプンカンプンなのにあつかましい事言ってスイマセン!

よろしくお願いします゜・(。>д<。)・゜

補足日時:2009/12/01 14:53
    • good
    • 0

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