![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
文字「&」を出力したいのにCGI.pmが自動的に「&」に変換してしまいます。
具体的には、
<a href="abc" accesskey="&">abc</a>
のような文字列を出力させるために、
print($q->a({-href => 'abc', -accesskey => '&'}, 'abc'))
というコードを実行したのですが、
出力される文字列は、
<a accesskey="&" href="abc">abc</a>
のように「&」が自動的に「&」に置き換わってしまいます。
これの解決策として、オブジェクトを使用せずに、直接CGI.pmのメソッドを呼び出すと、なぜか変換されません。
すなわち、上のコードの「$q」の部分を「CGI」として、
print(CGI->a({-href => 'abc', -accesskey => '&'}, 'abc'))
とします。
これは何か意味があるのでしょうか。それともただのバグ?
直接CGI.pmのメソッドを呼び出さなくても解決する方法はありますか。
accesskeyに関するご意見は、先日質問したこちらのスレへ頂けるとうれしいです。
http://oshiete1.goo.ne.jp/qa5707867.html
No.6ベストアンサー
- 回答日時:
えぇと, #2 の参考にあげた URL を読んでいただけるとありがたいのですが,
Certain attributes call for a single character from the document character set. These attributes take the %Character type in the DTD.
Single characters may be specified with character references (e.g., "&").
とあります. 最後の 1文を読めば分かるように, 「1文字」であっても文字実体参照を使うことは仕様上可能です.
承知しました。
しかし私の行きつけのチェックサイトでは、実体参照をした場合、1文字と見なしてくれないため、次の4文字は使用しない方針とします。
ダブルクォート(")、アンパサンド(&)、山カッコ(<と>)
No.5
- 回答日時:
W3C でも検証ツールは出している (ただしメッセージはすべて英語) ので, そっちでも確認してみてはどうでしょうか. でそっちでしらべると & でも & だけでも通ったりしますが....
いずれにしても, 仕様上は & や " などの文字実体参照を使えないとダメなはずです.
参考URL:http://validator.w3.org/
Tacosanさん、ご返信ありがとうございます。
なんとW3Cのツールでさえ、仕様通りではないのですね!
1.&はHTMLのメタ文字であり属性値としても「&」とせず「&」としなければならない
2.accesskey属性は1文字でなければならない
この2点を考慮すると、
accesskey="&"
は1に違反し、
accesskey="&"
は2に違反するため、
どちらも不正解に思えてきました。
ここは無難に&は使わない方がいいかなぁ?
No.4
- 回答日時:
えぇと,
Authors should use "&" (ASCII decimal 38) instead of "&" to avoid confusion with the beginning of a character reference (entity reference open delimiter). Authors should also use "&" in attribute values since character references are allowed within CDATA attribute values.
とあるので「& だけにする」のはアウトではないかと>#3.
まあ, & だけでも「てきと~に解釈してくれる」ユーザエージェントが多いかもしれないけど, should が使われている以上「ダメ」といわれても文句は言えない.
参考URL:http://www.w3.org/TR/html401/charset.html#h-5.3.2
まとめてのお礼でお許しを!
お2人の助言から、私としても、
accesskey="&"
とするのが、正解だと思いました。
そういうわけで、私の行きつけのチェックサイトがバグっている疑いが出てきました。
何とかしてサイト作成者とコンタクトしてみます。
今後も利用したいので。
No.3
- 回答日時:
どちらも正しい
&
^^^^^一文字でないで、エラーがカウントされている。以後のチェックはスキップされている。
よって、CGI.pmは修正している。
なお、accesskeyに&を使うと、キー操作はAlt + Shift + 6 になるけど・・・
No.2
- 回答日時:
ORUKA1951さんではありませんが仕様上は
<a href="abc" accesskey="&">abc</a>
が正解.
参考URL:http://www.w3.org/TR/html401/types.html#type-cha …
No.1
- 回答日時:
いやはやあまりにも基本的なところで躓いている。
【引用】____________ここから
また、著者は、「&」の代わりに「&」(ASCII十進38)を用い、文字参照の冒頭――文字実体参照の開始区切り子――と誤解されるのを避けるべきである。 CDATA型の属性値には文字参照が出現できるので、著者は属性値においても「&」を用いる必要がある。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[5.3.2 文字実体参照( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )]より
HTML内には決してそのままでは記述できない文字があります。
# 「<」は < 記号を表現する。
# 「>」は > 記号を表現する。
# 「&」は & 記号を表現する。
# 「"」は " 記号を表現する。
は、書けない。これらの文字は、HTML内でマークアップするために使われるため、必ず数値文字参照、あるいは文字実態参照で記述しなければなりません。
はじめてのWebドキュメントづくり「HTML化する文章と文字」 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/www/chars … )
CGIを使うためには、最低限これらのことは知っておかないと無理ですよ。
こんにちは。
なぜ、このような質問をしたいかというと、
私の行きつけの構文チェックサイト(http://openlab.ring.gr.jp/k16/htmllint/htmllintl …)では、
<a href="abc" accesskey="&">abc</a>
と書くと、
<A> の ACCESSKEY の属性値 `&` は正しくありません。ASCII1文字でなければなりません。
というエラーになってしまうためです。
W3Cでは、「属性値においても「&」を用いる必要がある」としているのですね。
しかし、このチェックサイトでは、
<a href="abc" accesskey="&">abc</a>
と書いても、エラーになりません。
ORUKA1951さんは、
<a href="abc" accesskey="&">abc</a>
<a href="abc" accesskey="&">abc</a>
この2つの書き方のうち、正しいのはどちらだとお考えですか。
はたまた、どちらも不正解ですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
- Excel(エクセル) Excelのセル内の特定の文字列を別のセルへ抽出したいです 2 2022/07/06 16:10
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- 政治 ABC予想で自衛隊を合憲にする事ができますよね? 3 2022/04/23 05:46
- 数学 これが人類最初のABC予想の応用ですか? 3 2022/04/27 05:41
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現 英数字を1つ以上含む...
-
指定した文字列を複数含むとい...
-
「何とかで始まり、何とかで終...
-
何故、日本は未だに数字を3桁...
-
Malformed UTF-8 character
-
プログラミングでは、半角括弧...
-
ACCESSの表で罫線を使うと縦方...
-
正規表現について教えてください
-
CSVファイルの中で、「 , 」カ...
-
住宅にカナを入力する際に丁目...
-
PHPの文字化けについて
-
メールのURLがつながってしまう
-
いまスマホからカードの申込み...
-
unicodeの表示
-
スペースで区切られた氏名から...
-
dat形式ををcsv形式に変更したい。
-
python 大文字小文字を区別しな...
-
jcode.plのかわり
-
対称群はなぜそう呼ばれるので...
-
vba アクティブシートの名前変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【abc】に【完全一致】する正規...
-
入力された文字列が、LD22000を...
-
「何とかで始まり、何とかで終...
-
VBA EXCEL あるセルの中の一...
-
正規表現の否定先読みで、複数...
-
バッチファイルの正規表現を利...
-
「abcで始まらない」を正規表現...
-
角カッコが含まれてるかどうか...
-
正規表現
-
正規表現 英数字を1つ以上含む...
-
VBAのInstrについて
-
文字連続の検出手段
-
文頭・文末の記号をチェック
-
空白の制御
-
intの挙動?
-
VBにおける文字列の部分一致検索
-
マクロ・VB得意な人へ。指定し...
-
文字と数字の判定
-
CGI.pmで'&'が'&'に置き換...
-
XML::Xpathで部分一致検索をす...
おすすめ情報