• ベストアンサー

javascriptでCGIに値を渡したいのですが、テキストエリアの値で改行コードが消えてしまいます。教えて下さい。

javascriptでCGIに値を渡したいのですが、テキストエリアの値で改行コードが消えてしまいます。教えて下さい。 別窓ページにてtest.cgiを呼び出し、そのCGIに値を渡したいのですが、 一応値はテキスト形式で渡せるのですが、テキストエリアで入力したものの 改行コードが消えてしまいます。何か良い方法があれば、教えて下さい。 <FORM name="test" ACTION="javascript:test_window_open('/cgi-bin/test.cgi?bikou='+document.test.bikou.value);"> : : <TEXTAREA rows="8" cols="50" name="bikou"></TEXTAREA>

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

恐らくCGIの結果を、window.open でスタイル指定したウィンドウに表示したいのでしょうね。その際のフォームデータの渡し方で困っているのだと思います。 No.1さんのように escape 関数を使うのも手ですが、escape はブラウザによっては日本語を Unicode にしてしまうので、CGIスクリプトが Unicode に対応していなければ文字化けしてしまいます。 このような場合は、まず window.open で別窓を作り、そのウィンドウ宛にフォームを送信する、という方法が有効です。(下記参照) ・FORMタグを次のように変更します。 <FORM action="/cgi-bin/test.cgi" method="post" target="newwin" onSubmit="make_newwin(this)"> ・make_newwin 関数を作成します。 function make_newwin(f) {   var w = window.open('about:blank', f.target, 'スタイル設定');   w.focus(); } フォームを送信しようとすると FORM の onSubmit により、make_newwin が(送信前に)実行されます。この時、引数に this(FORM自身)を渡し、window.open の2番目の引数(target指定)に f.target(FORMのtarget属性値)を指定するのがミソです。 その後フォームの送信が行われますが、この時既に newwin という(スタイル指定された)ウィンドウが存在していますので、そちらに送信される、というわけです。 またこの方法では、JavaScript をオフにしている人でも、スタイル指定がされないだけで、別画面にCGIの結果を表示することができます。 (質問の方法では何も起こりません。)

sara555
質問者

お礼

回答有難うございます。 この方法を試したところうまくいきました。 有難うございました。

その他の回答 (2)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

POSTで送ればいいような気がしますけど。。。

sara555
質問者

お礼

回答有難うございます。 POSTだけでは、うまくいきませんでした。 有難うございました。

  • mohao
  • ベストアンサー率15% (10/63)
回答No.1

escape()関数を使用してはいかがでしょうか 値を渡す際、以下のようにし、 '/cgi-bin/test.cgi?bikou='+escape(document.test.bikou.value); CGIのほうのjavascriptで unescape() をして書き出すと良いかと思います。

sara555
質問者

お礼

回答ありがとうございます。 この方法を試してみましたが、 CGIのjavascriptでうまく変換することが できませんでした。 他の時に使わせていただきます。

関連するQ&A