- ベストアンサー
CGI.pmで'&'が'&'に置き換わってしまう!
- CGI.pmを使用していると、文字「&」が自動的に「&」に変換されてしまいます。
- オブジェクトを使用せずに直接CGI.pmのメソッドを呼び出すと、「&」が変換されない現象が発生します。
- accesskeyに関するご意見は、別のスレッドで質問してください。
- みんなの回答 (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文字」であっても文字実体参照を使うことは仕様上可能です.
その他の回答 (5)
- Tacosan
- ベストアンサー率23% (3656/15482)
W3C でも検証ツールは出している (ただしメッセージはすべて英語) ので, そっちでも確認してみてはどうでしょうか. でそっちでしらべると & でも & だけでも通ったりしますが.... いずれにしても, 仕様上は & や " などの文字実体参照を使えないとダメなはずです.
- 参考URL:
- http://validator.w3.org/
お礼
Tacosanさん、ご返信ありがとうございます。 なんとW3Cのツールでさえ、仕様通りではないのですね! 1.&はHTMLのメタ文字であり属性値としても「&」とせず「&」としなければならない 2.accesskey属性は1文字でなければならない この2点を考慮すると、 accesskey="&" は1に違反し、 accesskey="&" は2に違反するため、 どちらも不正解に思えてきました。 ここは無難に&は使わない方がいいかなぁ?
- Tacosan
- ベストアンサー率23% (3656/15482)
えぇと, 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 が使われている以上「ダメ」といわれても文句は言えない.
お礼
まとめてのお礼でお許しを! お2人の助言から、私としても、 accesskey="&" とするのが、正解だと思いました。 そういうわけで、私の行きつけのチェックサイトがバグっている疑いが出てきました。 何とかしてサイト作成者とコンタクトしてみます。 今後も利用したいので。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
どちらも正しい & ^^^^^一文字でないで、エラーがカウントされている。以後のチェックはスキップされている。 よって、CGI.pmは修正している。 なお、accesskeyに&を使うと、キー操作はAlt + Shift + 6 になるけど・・・
- Tacosan
- ベストアンサー率23% (3656/15482)
ORUKA1951さんではありませんが仕様上は <a href="abc" accesskey="&">abc</a> が正解.
- ORUKA1951
- ベストアンサー率45% (5062/11036)
いやはやあまりにも基本的なところで躓いている。 【引用】____________ここから また、著者は、「&」の代わりに「&」(ASCII十進38)を用い、文字参照の冒頭――文字実体参照の開始区切り子――と誤解されるのを避けるべきである。 CDATA型の属性値には文字参照が出現できるので、著者は属性値においても「&」を用いる必要がある。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[5.3.2 文字実体参照( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/charset.html#h-5.3.2 )]より HTML内には決してそのままでは記述できない文字があります。 # 「<」は < 記号を表現する。 # 「>」は > 記号を表現する。 # 「&」は & 記号を表現する。 # 「"」は " 記号を表現する。 は、書けない。これらの文字は、HTML内でマークアップするために使われるため、必ず数値文字参照、あるいは文字実態参照で記述しなければなりません。 はじめてのWebドキュメントづくり「HTML化する文章と文字」 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/www/charset.html ) CGIを使うためには、最低限これらのことは知っておかないと無理ですよ。
お礼
こんにちは。 なぜ、このような質問をしたいかというと、 私の行きつけの構文チェックサイト(http://openlab.ring.gr.jp/k16/htmllint/htmllintl.html)では、 <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つの書き方のうち、正しいのはどちらだとお考えですか。 はたまた、どちらも不正解ですか。
お礼
承知しました。 しかし私の行きつけのチェックサイトでは、実体参照をした場合、1文字と見なしてくれないため、次の4文字は使用しない方針とします。 ダブルクォート(")、アンパサンド(&)、山カッコ(<と>)