CGI.pmのcheckboxの-labelにHTMLタグを含んだ文字

このQ&Aのポイント
  • CGI.pmのcheckbox関数を使ってHTMLタグを含んだ文字列を生成する方法
  • 実際に返される文字列がHTMLタグがエスケープされてしまう問題
  • 対策として、エスケープを回避する方法を探す必要がある
回答を見る
  • ベストアンサー

CGI.pmのcheckboxの-labelにHTMLタグを含んだ文字

CGI.pmのcheckboxの-labelにHTMLタグを含んだ文字列を渡すことはできますか 具体的には、CGI.pmのcheckbox関数を使って次のような文字列を生成したいです <label><input type="checkbox" name="abc" value="xyz" accesskey="A" />abc(<span style="text-decoration: underline">A</span>)</label> 次のソースでうまくいくと思ったのですが、 $q->checkbox(-name => 'abc', -value => 'xyz', -accesskey => 'A', -label => 'abc(' . $q->span({-style => 'text-decoration: underline'}, 'A') . ')') 実際に返される文字列は、 <label><input type="checkbox" name="abc" value="xyz" accesskey="A" />abc(&lt;span style=&quot;text-decoration: underline&quot;&gt;A&lt;/span&gt;)</label> のように-labelに指定したHTMLタグが&○○;のようにエスケープされてしまいました・・・(T_T)

  • Perl
  • 回答数1
  • ありがとう数16

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

  • ベストアンサー
回答No.1

use CGI; my $q = CGI->new(); $q->autoEscape(0); print $q->checkbox( -name => 'abc', -value => 'xyz', -accesskey => 'A', -label => 'abc(' . $q->span( { -style => 'text-decoration: underline' }, 'A' ) . ')' ); $q->autoEscape(1);

zyousuke
質問者

お礼

おお! autoEscapeという関数を使って、自動エスケープ機能のオン/オフができるのですね。 この自動エスケープ機能は、今までも結構イライラしていたものなので、 特定の場所だけオフにするよりも、 私のスクリプトでは先頭にautoEscape(0)を書いたきりにします どうも、ありがとうございました!

関連するQ&A

  • CGI.pmで'&'が'&amp;'に置き換わってしまう!

    文字「&」を出力したいのにCGI.pmが自動的に「&amp;」に変換してしまいます。 具体的には、 <a href="abc" accesskey="&">abc</a> のような文字列を出力させるために、 print($q->a({-href => 'abc', -accesskey => '&'}, 'abc')) というコードを実行したのですが、 出力される文字列は、 <a accesskey="&amp;" href="abc">abc</a> のように「&」が自動的に「&amp;」に置き換わってしまいます。 これの解決策として、オブジェクトを使用せずに、直接CGI.pmのメソッドを呼び出すと、なぜか変換されません。 すなわち、上のコードの「$q」の部分を「CGI」として、 print(CGI->a({-href => 'abc', -accesskey => '&'}, 'abc')) とします。 これは何か意味があるのでしょうか。それともただのバグ? 直接CGI.pmのメソッドを呼び出さなくても解決する方法はありますか。 accesskeyに関するご意見は、先日質問したこちらのスレへ頂けるとうれしいです。 http://oshiete1.goo.ne.jp/qa5707867.html

    • ベストアンサー
    • Perl
  • checkboxの文字連結の方法を教えてください

    <INPUT name="ch" type="checkbox" value="1">1 <INPUT name="ch" type="checkbox" value="2">2 <INPUT name="ch" type="checkbox" value="3">3 <INPUT name="ch" type="checkbox" value="4">4 <INPUT name="ch" type="checkbox" value="5">5 選択してボタンを押すとチェックされた文字だけをカンマで連結して <a href="http://xxx.xx.ne.jp/xx.cgi?1,3,5">リンク</a> と表示したいのですがどのように書けばいいのでしょうか。 よろしくお願いします。

  • 【緊急】リアルタイムでエラーチェック

    下記のコードを使って、リアルタイムでエラーチェックを行うファームを作りたいと考えています。 このコードだとsubmitしてからでないとコードチェックが行われないので、最初の入力時から行うようにしたいのですが、何か手立てはないでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>exValidationサンプル 2</title> <link type="text/css" rel="stylesheet" href="css/style.css" /> <link type="text/css" rel="stylesheet" href="skin/selectable/style.css" /> <link type="text/css" rel="stylesheet" href="css/exvalidation.css" /> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.easing.js"></script> <script type="text/javascript" src="js/exvalidation.js"></script> <script type="text/javascript" src="js/exchecker-ja.js"></script> <script type="text/javascript"> $(function(){ $("form") .exValidation({ rules: { name: "required", kana: "required katakana", email: "required email hankaku group", pass: "required min6 max12", repass: "required retype-pass", radio: "radio", checkbox: "checkbox" }, errInsertPos: 'after', errPosition: 'fixed' }); }); </script> </head> <body> <div class="pagebody"> <h1>exValidation</h1> <form> <fieldset> <p class="attention">*は必須項目です</p> <table> <tbody> <tr> <th>Name<span>*</span></th> <td><input type="text" id="name" name="name" value="" /></td> </tr> <tr> <th>Kana<span>*</span></th> <td><input type="text" id="kana" name="kana" value="" /></td> </tr> <tr> <th>Mail<span>*</span></th> <td><span id="email"><input type="text" id="email" name="email" value="" /> @ <input type="text" name="email2" value="" /></span></td> </tr> <tr> <th>Password<span>*</span></th> <td><input type="password" id="pass" name="pass" value="" /></td> </tr> <tr> <th>Retype-Password<span>*</span></th> <td><input type="password" id="repass" name="repass" value="" /></td> </tr> <tr> <th>Sex<span>*</span></th> <td> <span id="radio"> <label for="male"><input type="radio" id="male" name="sex" value="male" />male</label> <label for="female"><input type="radio" id="female" name="sex" value="female" />female</label> </span> </td> </tr> <tr> <th>Prefecture<span>*</span><br /> this is selectable</th> <td> <select id="pref" name="pref" class="selectable"> <optgroup label="---"> <option value="">---</option> </optgroup> <optgroup label="北海道"> <option value="01">北海道</option> </optgroup> <optgroup label="東北"> </optgroup> </select> </td> </tr> <tr> <th>City</th> <td><input type="text" name="city" value="" /></td> </tr> <tr> <th>Street</th> <td><input type="text" name="street" value="" /></td> </tr> <tr> <th>Favorite<span>*</span></th> <td> <span id="checkbox"> <label for="f1"><input type="checkbox" id="f1" name="fav" value="f1">books</label> <label for="f2"><input type="checkbox" id="f2" name="fav" value="f2">music</label> <label for="f3"><input type="checkbox" id="f3" name="fav" value="f3">game</label> <label for="f4"><input type="checkbox" id="f4" name="fav" value="f4">study</label> <label for="f5"><input type="checkbox" id="f5" name="fav" value="f5">fishing</label> </span> </td> </tr> </tbody> </table> </fieldset> <p class="submit"><input type="submit" value="Submit" class="button" /></p> </form> </div> </body> </html>

  • 入力フォームについて

    FC2のホームページを利用しています 入力フォームのサンプルを手本にして、以下のように作成しましたが 「送信ボタン」をクリックしても、メールが届きません。 どうしてでしょうか? <form action="mailto:xxx@xxx.ne.jp" enctype="text/plain" method="post"> <p><label>NAME:<br /> <input type="text" name="名前" value="" tabindex="1" accesskey="b"> </label></p> <p><label>E-MAIL:<br /> <input type="text" name="メールアドレス" value="" tabindex="2" accesskey="a"> </label></p> <p><label>感想・ご意見<br> <textarea name="title" rows="15" cols="30" tabindex="9" accesskey="i"> </textarea> </label></p> <p> <input type="reset" value="送信" tabindex="10" accesskey="s"> <input type="reset" value="取消" tabindex="11" accesskey="r"> </p> </form>

  • a:hoverについて

    リンク毎に「a:hover」のスタイルを変更したいのですが、 a:link { text-decoration: none; color: blue; } a:visited { text-decoration: none; color: blue; } a:hover { text-decoration: underline; color: red; } 通常は↑のスタイルで、 a[aaa]:hover { text-decoration: underline; color: blue; } nameを指定したリンクの場合は↑にしたい。 <a name="aaa" href="~">リンク</a> このような感じだと、上のリンクにカーソルを持っていっても青に変わってくれません。 どーすれば良いでしょうか?

    • ベストアンサー
    • HTML
  • read.cgi等のタグの追加について

    #------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- sub bbcodecnv { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/ig; $str =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/ig; $str =~ s/\[u\](.*?)\[\/u\]/<span style=\"text-decoration:underline\">$1<\/span>/ig; $str =~ s/\[s\](.*?)\[\/s\]/<span style=\"text-decoration:line-through\">$1<\/span>/ig; $str =~ s/\[code\](.*?)\[\/code\]/<code>$1<\/code>/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/<span style=\"color:$1\">$2<\/span>/ig; return $str; } #------------------------------------------------- # BBCode削除 #------------------------------------------------- sub bbcodedel { my $str = shift; $str =~ s/\[b\](.*?)\[\/b\]/$1/ig; $str =~ s/\[i\](.*?)\[\/i\]/$1/ig; $str =~ s/\[u\](.*?)\[\/u\]/$1/ig; $str =~ s/\[s\](.*?)\[\/s\]/$1/ig; $str =~ s/\[code\](.*?)\[\/code\]/$1/ig; $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/$1/ig; $str =~ s/\[color=(\#[0-9A-F]{6}|[A-Z]+)\](.*?)\[\/color\]/$2/ig; return $str; } と初期設定でありますが、 リスト形式のものは、どういう風に書いたら 良いのでしょうか?? いろいろ調べて(試して)みたんですが、 できませんでした。 よろしくお願いします! ちなみに、 $str =からやっぱり始まるんでしょうか?

    • ベストアンサー
    • Perl
  • MySQLにHTMLタグを挿入したい

    PHPでつくった登録フォームよりhtmlタグを入力してそれをtext型のフィールドにhtmlタグごと入れたいのですが、うまくいいようにはいりません。 入力 <table border="0" width="80%"><tr>問1 磁気ディスク装置において,磁気ヘッドをある位置から目的の位置に移動させるのに要する時間を何と呼ぶか。</tr><tr> <td><input type="radio" name="1" value="ア">ア  アクセス時間</td><td><input type="radio" name="1" value="イ">イ  サーチ時間</td><td><input type="radio" name="1" value="ウ">ウ  シーク時間</td><td><input type="radio" name="1" value="エ">エ  データ転送時間</td></tr></table><br><hr width="80%"><br> フィールドの保存データ &lt;table border=&quot;0&q uot; width=&quot;80%&quot;&gt;&lt;tr&gt;問1 磁気ディスク装置において,磁気ヘッ ドをある位置から目的の位置に移動させるのに要する時間を何と呼ぶか。&lt;/tr&gt;&lt ;tr&gt; &lt;td&gt;&lt;input type=&quot;radio&quot; name=&quot;1&quot; value=&qu ot;ア&quot;&gt;ア  アクセス時間&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;radio &quot; name=&quot;1&quot; value=&quot;イ&quot;&gt;イ  サーチ時間&lt;/td&gt;&lt ;td&gt;&lt;input type=&quot;radio&quot; name=&quot;1&quot; value=&quot;ウ&quot;& gt;ウ  シーク時間&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;radio&quot; name=&q uot;1&quot; value=&quot;エ&quot;&gt;エ  データ転送時間&lt;/td&gt;&lt;/tr&gt;&l t;/table&gt;&lt;br&gt;&lt;hr width=&quot;80%&quot;&gt;&lt;br&gt; と入ってしまい データベースを参照してhtmlを表示したときには <table border="0" width="80%"><tr>問1 磁気ディスク装置において,磁気ヘッドをある位置から目的の位置に移動させるのに要する時間を何と呼ぶか。</tr><tr> <td><input type="radio" name="1" value="ア">ア  アクセス時間</td><td><input type="radio" name="1" value="イ">イ  サーチ時間</td><td><input type="radio" name="1" value="ウ">ウ  シーク時間</td><td><input type="radio" name="1" value="エ">エ  データ転送時間</td></tr></table><br><hr width="80%"><br> と表示されうまくいきません。

  • HTMLタグ内に記入する変数の記入方法について

    こんにちは。いつもお世話になります。 例えば、$axis という変数があるとします。 これを、下記のようなPHP内のHTMLタグに記入する際、 タグとタグの間に入れる際の正式な書き方は、 <span>" . $axix . "</span> と、どこかで見た記憶があり、そのように書いているのですが、 多分、サーバー環境にも関係しているかも知れませんが、 <span>$axix </span> でも、 <span>{$axix}</span> でも取りあえず動作してます。 また、下記のようなタグ内に入れる場合でも、 <input type='text' name='axis' size='5' value='$axis'> <input type='text' name='axis' size='5' value='{$axis}'> <input type='text' name='axis' size='5' value='" . $axis . "'> でも動作しております。 なにが正式の書き方でしょうか。教えて下さい。 個人的には、タグとタグの間は、<span>" . $axis . "</span>。 タグ内では、'{$axis}'と{}で括る書き方が好きなんですが。 また、 value=\"$axis\" value=\"$pref\" value=\"$name\" value=\"$tel\" .. と言ったものを、正規表現可能エディタで、一括して value='{$axis}' value='{$pref}' value='{$name}' value='{$tel}' .. に置換する正規表現はないでしょうか。 教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • CGI.pmのtextfieldのデフォルト文字列が文字化けしてしまいます。。

    CGI.pmのtextfieldの設定したデフォルト文字列が文字化けしてしまいます。。 以下のコードはちゃんと表示されるのですが。 print checkbox('only_exist', 'checked', 1, '削除済動画除外'); → <label><input type="checkbox" name="only_exist" value="1" />削除済動画除外</label> textfieldを使った以下のコードはちゃんと表示されません。。 print textfield('keyword', '削除済動画除外', 20); → <input type="text" name="keyword" value="&atilde;&sup2;&atilde;&atilde;‚‰&atilde;—" size="20" /> どっちもうまく表示されないのならわかるのですが、片方だけなので全く原因が分かりません。。 コードはUTF-8にて記述。(Non BOM) コード冒頭は #!/usr/bin/perl require 5.8.0; use utf8; use strict; use warnings; use Encode qw(decode encode); use CGI qw(:form param -nosticky -no_undef_params); use Data::Dumper; use POSIX 'strftime'; use LWP::UserAgent; use HTTP::Request; use open OUT => ":encoding(utf8)"; use open ":std"; use HTML::Entities 'encode_entities'; となっております。 アドバイスいただけると嬉しいです _ _

  • ラベルのマークアップ

    <input name="price_min" type="text" value="" id="price_min" />~ <input name="price_max" type="text" value="" id="price_max" />円 このようなフォーム要素があるとき、 どのようにラベル付けをするのが妥当なのでしょうか? <label> 価格:<br> <input name="price_min" type="text" value="" id="price_min" />~ <input name="price_max" type="text" value="" id="price_max" />円 </label> このように、ひとつの<label>に対して二つのコントロールを含めることはできるのでしょうか? 現在は<span>価格</span> のように<span>タグで代用しています。 ぜひアドバイスをお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう