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
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として正しいかどうか、という点は別問題です。
No.4
- 回答日時:
\"
と書けば、エスケープされるはずですが。
回答ありがとうございます。
色々アドバイスをもらいましたが、やっぱりエスケープがシンプルでいいような気がします。
ありがとうございました。
No.2
- 回答日時:
No1さんの回答であっているような気がしますが、別のスクリプト言語やプログラム言語で似た問題がある時、やっぱりどうするか、という問題を抱いたとき、「ヒア文字列」の発想は役にたちます。
HTML文で問題になるのは、””内でJavaScriptを記述すると、長い文になると表現が難しくなり、誤った書式になる事が多い。
では、それを(””内)、新たなユーザー関数を定義するればいいこなのです。この定義の仕方はたくさんあるので、サンプルは自分で考えてください。それで。
onclick=xxx
とするだけです。問題なのはXHMLで書くときだけです。この場合も ' を使えばいいだけです。
これってヒア文字列ににているでしょ。大規模なWebアプリ(Javaを使用した)で多言語を使用している場合は、よく引っかかる問題です(エスケープ文字列は、どの言語も似ている、また、予約語にもなっていて、とんだエスケープ文字でバグる事がある)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl/cgi リダイレクトができない
-
(CGI)お気に入り登録やアドレス...
-
TOK2で基礎的なCGIをUPしたが動...
-
cgiでのprint関数
-
CGIでCSVとしてデータ保存→検索...
-
htmlからパラメータで、cgiに渡...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
-
VB.net データーグリッドビュー...
-
[HTML]プルダウンメニューの横...
-
Error: No Recipient というエ...
-
チェックボックスとセレクトボ...
-
パールの-pオプションの値0777...
-
メールフォームのプルダウンメ...
-
CGIでチェックボックスを使...
-
買い物カゴの作成
-
Shiromuku様のCGIの幅設定な...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlからパラメータで、cgiに渡...
-
sendmail 送信先を複数設定す...
-
iis+cgiでmultipart/form-data...
-
フォントサイズを変えるには?
-
CGI経由でのPDFファイルをダウ...
-
perl/cgi リダイレクトができない
-
2つのドメイン、同じサーバー。...
-
サーバー上のPDFにCGIでパスワ...
-
クッキー書き込みが正常に行わ...
-
cgi(perl) sendmailの使い方
-
CGI
-
クッキーを使って投票欄に名前...
-
TOK2で基礎的なCGIをUPしたが動...
-
クオートの多重入れ子をするには?
-
CGIでテキストボックスの内容に...
-
フォームメール(iモード用)で...
-
プログラム実行中の待機ページ...
-
ホームページビルダーで作ったh...
-
substrで数値を抽出してのマッ...
-
perlで重複データを集計
おすすめ情報