
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ランキング
-
掲示板(kentさんの所のsunbbs...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
チェックボックスとセレクトボ...
-
「value」に2つの値をセットす...
-
CGIでhtmlを作成するもブラウザ...
-
INPUT TYPE
-
WEBアプリケーションからフォル...
-
チェックボックスでのvalue値の...
-
select値をhiddenのvalueに渡し...
-
EXCELとの連携
-
フォームの結果表示場所を指定...
-
ローカルテストサーバーと本番...
-
MSPゴシックで、一番幅を取る文字
-
FORMのselectの選択肢を最初か...
-
[HTML]プルダウンメニューの横...
-
CGIを使ったメールフォーム
-
FORMを中央に表示したい
-
リストボックス(multipleなsel...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
掲示板(kentさんの所のsunbbs...
-
htmlからパラメータで、cgiに渡...
-
CGI内でけいたいスマホの振り分け
-
4年に1回+6,62以上は1の位を...
-
CGIプログラム内でのHTML表記
-
ログファイルの編集についてお...
-
ひとつのCGIファイルに複数のペ...
-
(CGI)お気に入り登録やアドレス...
-
CGI によるファイルのアップロード
-
TOK2で基礎的なCGIをUPしたが動...
-
【perl/cgi】文字列を検索して...
-
変わるアドレスにリンクする方法
-
サーバー上のPDFにCGIでパスワ...
-
クオートの多重入れ子をするには?
-
CGIでテキストボックスの内容に...
-
sendmail 送信先を複数設定す...
-
cgiについて教えて下さい。
-
掲示板 imgboard のcgi改造方法
-
CGI経由でのPDFファイルをダウ...
-
cgi(perl) sendmailの使い方
おすすめ情報