- ベストアンサー
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>
- みんなの回答 (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の結果を表示することができます。 (質問の方法では何も起こりません。)
その他の回答 (2)
- ngsvx
- ベストアンサー率49% (157/315)
POSTで送ればいいような気がしますけど。。。
お礼
回答有難うございます。 POSTだけでは、うまくいきませんでした。 有難うございました。
- mohao
- ベストアンサー率15% (10/63)
escape()関数を使用してはいかがでしょうか 値を渡す際、以下のようにし、 '/cgi-bin/test.cgi?bikou='+escape(document.test.bikou.value); CGIのほうのjavascriptで unescape() をして書き出すと良いかと思います。
お礼
回答ありがとうございます。 この方法を試してみましたが、 CGIのjavascriptでうまく変換することが できませんでした。 他の時に使わせていただきます。
お礼
回答有難うございます。 この方法を試したところうまくいきました。 有難うございました。