クオートの多重入れ子をするには?

このQ&Aのポイント
  • print文でhtmlを出力するCGIをperlでプログラムしているのですが、クオートの入れ子がうまくいきません。
  • ヒア文字列を使ってprint "<<"A";"とすればうまくいくのですが、ヒア文字列を使わずに簡素に書く方法は無いでしょうか?
  • 質問者は、print文でHTMLを出力する際にクオートの入れ子が上手く動作しないという問題があり、ヒアドキュメントを使えば解決できるが、ヒアドキュメントを使わずに簡潔に書く方法はないかと質問している。
回答を見る
  • ベストアンサー

クオートの多重入れ子をするには?

print文でhtmlを出力するCGIをperlでプログラムしているのですが、 クオートの入れ子がうまくいきません。(3重入れ子) print "<td><input type=button value='ログイン' onclick='action="./test.cgi";submit();'></td>\n"; ヒア文字列を使って print <<"A"; <td><input type=button value='ログイン' onclick="action='./test.cgi';submit();"></td>\n A とすればうまくいくのですが、ヒア文字列を使わずに簡素に書く方法は無いでしょうか? よろしくお願いします。m(__)m

  • CGI
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

Perlについて言えば、クオートに「入れ子」なんてものはありません。 ダブルクォートの中にシングルクオートがあっても、それはただの「シングルクオートを表わす文字」です。 質問にある > 'action="./test.cgi";submit();' の最初の'はただの文字で、対応する(ことを期待している)最後の'とはまったく無関係です。 < Aaction="./test.cgi";submit();A と書いたのと、(Perlの解釈は)同じです。 クオート中にそのクオート文字を含ませたい場合は、\でエスケープすればいいだけです。 print "<td><input type=button value='ログイン' onclick=\"action='./test.cgi';submit();\"></td>\n"; # onclickの引用符をヒアドキュメントでの例に合せました。 なお、出力結果がHTMLとして正しいかどうか、という点は別問題です。

MenPin
質問者

お礼

回答ありがとうございます。 基本的な考え方を誤認識していました。 ありがとうございました。

その他の回答 (3)

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.4

\" と書けば、エスケープされるはずですが。

MenPin
質問者

お礼

回答ありがとうございます。 色々アドバイスをもらいましたが、やっぱりエスケープがシンプルでいいような気がします。 ありがとうございました。

回答No.3

ヒアドキュメントいいと思いますが、とりあえず。 print qq{<td><input type=button value='ログイン' onclick='action="./test.cgi";submit();'></td>\n};

MenPin
質問者

お礼

回答ありがとうございます。 qqなるものがあるのですね、エスケープを使わなくていいから見やすいですね。 ありがとうございました。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

No1さんの回答であっているような気がしますが、別のスクリプト言語やプログラム言語で似た問題がある時、やっぱりどうするか、という問題を抱いたとき、「ヒア文字列」の発想は役にたちます。 HTML文で問題になるのは、””内でJavaScriptを記述すると、長い文になると表現が難しくなり、誤った書式になる事が多い。 では、それを(””内)、新たなユーザー関数を定義するればいいこなのです。この定義の仕方はたくさんあるので、サンプルは自分で考えてください。それで。 onclick=xxx とするだけです。問題なのはXHMLで書くときだけです。この場合も ' を使えばいいだけです。 これってヒア文字列ににているでしょ。大規模なWebアプリ(Javaを使用した)で多言語を使用している場合は、よく引っかかる問題です(エスケープ文字列は、どの言語も似ている、また、予約語にもなっていて、とんだエスケープ文字でバグる事がある)。

MenPin
質問者

お礼

回答ありがとうございます。 なるほど関数にする手もありますね。 ありがとうございました。

関連するQ&A

  • 同じnameのhiddenで別々の内容のvalueを送りたい

    同じnameのhiddenで別々の内容のvalueを送りたい <form action="" name="MyForm" method="post"> <input type="hidden" name="rm" value="×××.txt">テスト1 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> <input type="hidden" name="rm" value="○○○.txt">テスト2 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> <input type="hidden" name="rm" value="△△△.txt">テスト3 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> 別のcgiでform送信すると、txtファイルが生成され、上記の繰り返しの部分に追加されていく様なイメージです。 閲覧・削除ボタンを押すと直前のhiddenを送信したいのですが、現状では一番最初のhiddenが送信されてしまいます。 方法がわかる方いらっしゃいましたら、御回答お願い致します。

    • ベストアンサー
    • HTML
  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • 複数ボタンのvalueを送れない

    ひとつのフォームで複数のボタンを使う方法を探していたら 次のような方法があるとのことでした。 <form method="post" name="MyForm"> <INPUT TYPE="BUTTON" VALUE="aaa" onClick="MyForm.action='hoge.cgi';MyForm.submit();"> <INPUT TYPE="BUTTON" VALUE="bbb" onClick="MyForm.action='hoge.cgi';MyForm.submit();"> </form> これで、ボタンによってVALUEを渡せるのかと思いきや、 飛んでいきませんでした・・・ 複数ボタンを用意して、ボタンによってその VALUE値を渡す方法がありませんでしょうか?

    • ベストアンサー
    • CGI
  • チェックボックスの値取得。formが入れ子に…

    ASPでの開発です。 データを一覧表示する画面で、データ1行の横に削除用のボタンがあります。 複数のデータを削除できるよう、その横にチェックボックスをつけたいと考えています。 ただ、そうすると構造が以下のように <form action="…"> <input type = "button" value="チェックした項目を一括で!"> <input type = "checkbox"> <form action "…"> <input type = "button" value="test"> </form> <input type = "checkbox"> <form action "…"> <input type = "button" value="test"> </form> </form> formが入れ子になり、うまく動作しません。 これを解消するにはどうしたら良いのでしょうか…?

  • 名無しformの操作

    以下のような、元々名前のないformが複数ある場合にボタンイベントで発生した共通のtest()関数内で処理を行う場合、どのフォームか識別できる方法はあるのでしょうか? テスト1、をクリックした場合、テスト1のフォームの操作を行いたいです。 <script ....... function test(???) { document.どのフォームかわからない.action="/index.cgi"; document.どのフォームかわからない.a.value="1"; document.どのフォームかわからない.submit(); } </script> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト1" onclick="javascript:test(???)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト2" onclick="javascript:test(???)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト3" onclick="javascript:test(???)"> </form>

  • javascriptで電卓を作成

    プログラミングをまったくやったことがない状態から、ドットインストールやテックアカデミーのHTML,CSS,Javascriptの入門動画をすべて見終わった段階ですので、 基本的な仕組みと関数やfor文、if文、while文、などについてくらいは理解しています。 今回、javascriptを使って電卓のシステムを組む、という課題があり、 ネットで検索してやってみてはいるのですが行き詰っています。 最初は以下のような形で作成をしていました。 <body> <form name="myform">  <table border="1"> <tr> <td colspan="4"> <input type="text" name="result" value="" id="result"> </td> </tr> <tr> <td><input type="button" value=" "onclick="calc(' ')" ></td> <td><input type="button" value="%"onclick="calc('%')"></td> <td colspan="2"> <input type="button" value="AC" onclick="calc('AC')"></td> </tr> <tr> <td><input type="button" value="7" onclick="calc('7')"></td> <td><input type="button" value="8" onclick="calc('8')"></td> <td><input type="button" value="9" onclick="calc('9')"></td> <td><input type="button" value="÷" onclick="calc('÷')"></td> </tr> <tr> <td><input type="button" value="4"onclick="calc('4')" ></td> <td><input type="button" value="5"onclick="calc('5')" ></td> <td><input type="button" value="6"onclick="calc('6')"></td> <td><input type="button" value="×" onclick="calc('×')"></td> </tr>   <tr> <td><input type="button" value="1" onclick="calc('1')" ></td> <td><input type="button" value="2" onclick="calc('2')"></td> <td><input type="button" value="3" onclick="calc('3')"></td> <td><input type="button" value="-" onclick="calc('-')"></td> </tr> <tr> <td><input type="button" value="0" onclick="calc('0')" ></td> <td><input type="button" value="+" onclick="calc('+')"></td> <td colspan="2"> <input type="button" value="=" onclick="calc('=')"></td> </tr> </form> <script> function calc(a) { if (a === "=") { document.myform.kekka.value = eval(document.myform.kekka.value); } else if (a === "AC") { document.myform.kekka.value = ""; } else { document.myform.kekka.value += a; } </script> </body> </html> ですが、onclickとevalを使わず、代わりに「addEventListner」を用いるよう指示されました。 「addEventListner」に関しては、検索してなんとかざっと理解したのですが、それ以前に、電卓の基本的な関数の組み方を理解していないため、いまいちどこから手をつけたらいいかわかりません。 いろんなサイトを見ているといろんなやり方がでてきますが、ope=+,やflag=0などの表記をよく見かけます。が、この意味もいまいちわかっていません。。 初心者すぎるので、何かアドバイスをいただけますと幸いです。 宜しくお願いいたします。 また、このような初心者が使いこなせるようになるために向いている動画や書籍、ページがありましたら教えていただけますと助かります。

  • VBAでIEを操作submit処理について

    ExcelVBAでIEを操作する処理について勉強中です。 formで、nameが定義されておらず、submitが複数(4つ)ある場合です。 HTMLが下記記載の場合で、submit”A”をクリックしたいです。 <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="A"></td></form> <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="B"></td></form> <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="C"></td></form> <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="D"></td></form> VBAでのsubmitの記述を下記で試してみたのですが、うまくクリックできません。 ObjIE.document.forms(0).Action = "XXXX/admin.cgi" ObjIE.document.forms(0).submit どのように変えたらよいのでしょうか。。。 ご教授お願い致します。

  • ASPでHTMLの内容を取得するには??

    HTMLのテキスト1のテキストボックスはOnClickイベントで文字列を取得し表示させてます。 テキスト2のテキストボックスに文字列を入れてその文字列をtest.aspで取得させてます。 test.aspでもテキスト1の内容を取得する方法はありますでしょうか?? formの入れ子はできないし、1つのform内でテキスト1、テキスト2を入れると OnClickイベントがきかなくなります。 わかる方おりましたらご教示ください>< 宜しくお願い致します。 ------ aa.html ---------------- <html> <head> <title>ASP TEST </title> </head> <body> <form name="fm1"> <td> <p>テキスト1:<input type="text" name="pathTXT" size="40"> <input type="button" name="fileBT" value="選択"> </p> </td> </form> <form action="test.asp" method="post"> <td> <p>テキスト2:<input type="text" name="keyTXT" size="40"> <input type="submit" value="実行"> </p> </td> </form> </body> </html> <SCRIPT LANGUAGE="vbscript"> Sub fileBT_OnClick() Document.fm1.pathTXT.value = "aaaaaaaa" End sub </SCRIPT> ------ test.asp ---------------- <%@LANGUAGE="VBSCRIPT"> <% Response.Write(Request.Form(keyTXT)) '''↓↓↓↓↓↓↓↓↓ aa.htmlのpathTXTを取得したい。。。 Response.Write(Request.Form(pathTXT)) >%

    • ベストアンサー
    • HTML
  • プルダウンで選択したCGIを動かしたい(ACTION=""をプルダウンで変更するには?)

    プルダウンで選択したCGIを動かしたい(ACTION=""をプルダウンで変更するには?) 以下の <option value="test1.cgi">テスト1  <option value="test2.cgi">テスト2 <option value="test3.cgi">テスト3 <option value="test4.cgi">テスト4 4つのプルダウンメニューを選択して、それぞれ別のCGIを動かすには どうしたらできますか? よかったら教えて下さい。javascriptで出来そうな気がするのですが… <FORM name="testname" method="post" ACTION="/cgi-bin/??????" > <TABLE> <TR><TD> テスト</TD> <TD bgcolor="#FFFFFF"> <SELECT name=""> <option value=""> <option value="test1.cgi">テスト1  <option value="test2.cgi">テスト2 <option value="test3.cgi">テスト3 <option value="test4.cgi">テスト4 </SELECT></TD> </TR> <TR> <TD bgcolor="#cccccc" width="150"> 開始日</TD> <TD bgcolor="#FFFFFF"> <input name="daysS" type="text" size="8"> </TD> </TR> <TR> <TD bgcolor="#cccccc" width="150"> 終了日</TD> <TD bgcolor="#FFFFFF"> <input name="daysE" type="text" size="8"> </TD> </TR> </TABLE> <BR> <INPUT type="submit"name="send"value="開始"> <INPUT type="reset" name="reset" valiu="消去"> </FORM>

  • onClickイベントの記述方法

    こんばんは、皆さん。 JavaScriptのonClickイベントで、うまく動きません。 以下のようにしました。一部関連する箇所の抜粋です。 どこがおかしいかご指摘ください。 <SCRIPT TYPE="text/javascript"> <!-- function ActionChange(CGI){ document.form.action='http://x.x.x.x/cgi-bin/b.cgi'; document.form.submit(); } //--> </SCRIPT> <FORM METHOD="POST" NAME="FORM" ACTION="http://x.x.x.x/cgi-bin/a.cgi"> <INPUT TYPE="submit" VALUE="aaa"> <INPUT TYPE="button" VALUE="bbb" onclick="ActionChange('b.cgi)"> よろしくおねがいします。

専門家に質問してみよう