• 締切済み

HTMLタグの中に文字参照は書いても良い?

文字列中のHTMLタグを文法チェックする正規表現を考えています。 HTMLのバージョンは4.01 Transitionalを想定しています。 悩んでいるところが文字参照の&nbsp;でして、これはタグの中でも 空白を表すのかどうかという点です。 つまり、以下のタグはタグとして正しいかどうかということです。 (例1) <p&nbsp;id="hoge">aaaaa</p> (例2) <p &nbsp; id="hoge">aaaaa</p> ブラウザでタグとして認識されないので、恐らく誤りなのかなと 思っており、The W3C Markup Validation Serviceや Another html-lint GatewayでもNGと指摘されますが、理由を 仕様として把握したいと考えています。 なんとなく、漠然と仕様上書けないような気はしているのですが、 そのエビデンスがほしいのです。 「この仕様にこう書いてある。だから書けない」と言えれば よいのですが、その在り処がお分かりになる方、ぜひ教えて頂けますか。

みんなの回答

回答No.2

HTML4.01の仕様書には 要素を支配する規則については、SGML標準を参照されたい。 と書かれています。 HTML4.01の仕様書内にも若干のSGMLを解説した部分があり、 SGMLの規定では、CDATA形式の要素内容には文字参照が許容されないが、CDATA形式の属性値では許容される とも書かれています。 要するに下記例は文字参照が許されない要素内容なので不正であると ## つまり、以下のタグはタグとして正しいかどうかということです。 ## (例1) <p&nbsp;id="hoge">aaaaa</p> ## (例2) <p &nbsp; id="hoge">aaaaa</p> これが、文字参照の許される属性値中での使用だと許容されると思います。 ## (例3) <p id="hog&nbsp;e">aaaaa</p> ## (例4) <p id="hoge&nbsp;">aaaaa</p> ※ IDの属性値としてスペースが使えるかは調べてません。属性値として文字参照の使用が許容されているという例として記述しました。 HTMLの仕様は下記邦訳(参考訳で正確には仕様書ではない)から引用しました http://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/cover.html

TAKE-See
質問者

補足

ご回答頂き、ありがとうございます。 > HTML4.01の仕様書内にも若干のSGMLを解説した部分があり、 > SGMLの規定では、CDATA形式の要素内容には文字参照が許容されないが、 > CDATA形式の属性値では許容されるとも書かれています。 確かに、W3Cの仕様内にはSGMLの規定について解説している箇所が ちらほら見受けられますね。ということは、HTMLの仕様上NGというより、 SGMLの仕様上NGということでしょうか。 具体的なSGMLの仕様のどこに記載があるか(URLなど)を教えて頂けると大変 助かります。

回答No.1

<tag>文字</tag>が基本です。 &nbsp;は文字参照ですので、<tag>ここ</tag>にしか書けません。 ですのでどちらも正しくないです。 ちなみに&nbsp;はNo Break Spaceの略。 Breakは改行です(ちなみに<br>もbreakの略)。 「ここで改行しないでください」という意味のスペースになります。 このことからも、HTMLのタグに使うためのスペースではないことが確認できるかと思います。

TAKE-See
質問者

補足

ご回答頂き、ありがとうございます。 > <tag>文字</tag>が基本です。 ご指摘の通りだと思います。 基本ということですから、どこかにその仕様が記載されているのでは? と考えたことが事の発端となります。 > このことからも、HTMLのタグに使うためのスペースではないことが確認できるかと思います。 なるほど。意味から推測するというのも1つの手ですね。 だとすると、次の例ではいかがでしょうか。 (例3) <br id=&quot;hoge&quot;> 元の意味とは変わらないダブルクォートですが、文法上NGですよね。 RFCに記載されている、DTD上書けない、などの理由が考えられますので、 仕様ベースでご回答頂けると助かります。

関連するQ&A