| 1 |
wakaba |
1.1 |
|
| 2 |
|
|
[9] |
| 3 |
|
|
|
| 4 |
|
|
> |
| 5 |
|
|
:(275) 文字参照 (character reference): |
| 6 |
|
|
1[[文字]]に[[置換]]される[[参照]]。 |
| 7 |
|
|
[SRC[[[JIS X 4151]]-1992 3.]] |
| 8 |
|
|
- 備考 [[名前指定文字参照]]及び[[数値指定文字参照]]の2種類がある。 |
| 9 |
|
|
|
| 10 |
|
|
[1] 【[[SGML]]】 SGML の[DFN[文字参照]]には、[[数値指定文字参照]]と[[名前指定文字参照]]があります。 |
| 11 |
|
|
前者は[[文書文字集合]]における[[文字番号]]を使って文字を参照します。例えば [CODE(SGML)[!]] は、文字番号 [CODE(SGML)[33]] の文字 [WEAK[([[ISO/IEC 646]]:1991 [[IRV]] では [CODE[!]]。)]] |
| 12 |
|
|
を表します。後者は[[機能文字]]又は [[SGML宣言]]の[[具象構文]]の追加機能に指定してある文字を、その名前を使って参照します。 |
| 13 |
|
|
たとえば、 [SAMP(SGML)[&#RE]] は機能文字 [CODE(SGML)[[[RE]]]] |
| 14 |
|
|
[WEAK[([[記録終了]])]] を表します。 |
| 15 |
|
|
|
| 16 |
|
|
Web SGML では、更に[[16進文字参照]]が追加されました。 |
| 17 |
|
|
|
| 18 |
|
|
[2] これに類したものとして、[[文字実体参照]]があります。 |
| 19 |
|
|
これは、[[文字]]1文字 [WEAK[(と判断されるもの。)]] |
| 20 |
|
|
だけの[[一般実体]]を参照するものです。例えば、 |
| 21 |
|
|
[SAMP(SGML)[Á]] は[[アキュート・アクセント]]つきの文字 |
| 22 |
|
|
[SAMP[A]] に置換されるかもしれません。 |
| 23 |
|
|
|
| 24 |
|
|
(ちなみに、「[[文字実体]]」・「文字[[実体集合]]」 |
| 25 |
|
|
という言葉は SGML には出てきますが、 |
| 26 |
|
|
「文字実体参照」という言葉は [[HTML4]] で出てきます。 |
| 27 |
|
|
[WEAK[(という話は言葉遊びみたいなものですが。)]]) |
| 28 |
|
|
|
| 29 |
|
|
[3] 文字参照は、その文字が他の手段で簡便に書けない場合に限って使うことが望ましいとされています。 |
| 30 |
|
|
([[JISX4151]]‐1992 8.5 参照。) |
| 31 |
|
|
|
| 32 |
|
|
[7] |
| 33 |
|
|
- [CODE(ABNF)[[DFN[文字参照]] := [[名前指定文字参照]] / [[数値文字参照]] / [[16進文字参照]] ;; Web SGML [62] ]] |
| 34 |
|
|
|
| 35 |
|
|
- [4] 文字参照の文字番号の上限ってあるのかなあ?と思って読み返してみたけどわかんなかった。ないのかなあ。もっとも、文書文字集合の最後の数より大きいのを指定してもどうせエラーになるんだろうから意味はないんだけどさあ。 |
| 36 |
|
|
- [5] どうして >>4 みたいなことを考えたかというと、[[規格参照具象構文]]の文書文字集合は 0〜127 までしか定義してないのに、[[回避文字]]に 128〜255 が載ってるの。だから 128〜255 は回避文字になって、[[非SGML文字]]にもなる。非 SGML 文字を数値指定文字参照できるんだから、以下略。って。じゃあそれなら、一切言及のない 256 以上の値だったらどうなんだ、って疑問がわいてくる。[WEAK[もっとも、 SGML 考えた連中はせいぜい 255 までしか頭になかったんだろう。]] |
| 37 |
|
|
|
| 38 |
|
|
[6] 文字参照を使うと良い場面 (JIS 参考3 7.2 参照。) : |
| 39 |
|
|
- 入力装置の鍵盤に対応するものがない文字 |
| 40 |
|
|
- 表示できない文字 |
| 41 |
|
|
- [[非SGML文字]] |
| 42 |
|
|
- [[機能文字]]になっているがデータとして使いたい文字 |
| 43 |
|
|
|
| 44 |
|
|
など。 |
| 45 |
|
|
- [8] [[HTML4]] の文字参照についてイの規定 <IW:HTML4:charset.html#spec-char-encoding> によれば、 HTML では、文字参照は (1) 数値文字参照 : 10進または16進 (2) [[文字実体参照]]の2つの形で現れるとされています。一見 SGML の定義とは異なるように思えますが、 (規定中でわざわざ「SGML 文字参照」と言っていることを見ても) そうではなく、文字実体参照は文字参照を値に持つ実体であることを考えれば矛盾はないことが分かります。 |
| 46 |
|
|
|
| 47 |
|
|
[10] |
| 48 |
|
|
[[Firefox]] 2.0 で [CODE(char)[[[U+10FFFF]]]] より大きな[[16進数]]を指定すると、値によって: |
| 49 |
|
|
|
| 50 |
|
|
[CODE(char)[[[U-7FFFFFFF]]]] までなら[[サロゲート・ペア]]への変換の計算を拡張したらしき2[[文字]]の列になります。 |
| 51 |
|
|
|
| 52 |
|
|
;; <http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cbody%3E%0A%3Cp%3E%26%23x110000%3B%3C%2Fp%3E%0A%3Cscript%3E%0A%20%20var%20pv%20%3D%20document.getElementsByTagName%20('p')%5B0%5D.firstChild.data%3B%0A%20%20if%20(pv%20%3D%3D%20%22%5CuFFFD%22)%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DPASS%3EPASS%3C%2Fp%3E')%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DFAIL%3EFAIL%20(')%3B%0A%20%20%20%20for%20(var%20i%20%3D%200%3B%20i%20%3C%20pv.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20document.write%20(pv.charCodeAt%20(i).toString%20(16)%20%2B%20'%2C')%3B%0A%20%20%20%20%7D%0A%20%20%20%20document.write%20(')%3C%2Fp%3E')%3B%0A%20%20%7D%0A%3C%2Fscript%3E%3Cnoscript%3E%3Cp%20id%3Dtest%20class%3DFAIL%3EFAIL%20(noscript)%3C%2Fp%3E%3C%2Fnoscript%3E%0A>, |
| 53 |
|
|
<http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cbody%3E%0A%3Cp%3E%26%23x7fffffff%3B%3C%2Fp%3E%0A%3Cscript%3E%0A%20%20var%20pv%20%3D%20document.getElementsByTagName%20('p')%5B0%5D.firstChild.data%3B%0A%20%20if%20(pv%20%3D%3D%20%22%5CuFFFD%22)%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DPASS%3EPASS%3C%2Fp%3E')%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DFAIL%3EFAIL%20(')%3B%0A%20%20%20%20for%20(var%20i%20%3D%200%3B%20i%20%3C%20pv.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20document.write%20(pv.charCodeAt%20(i).toString%20(16)%20%2B%20'%2C')%3B%0A%20%20%20%20%7D%0A%20%20%20%20document.write%20(')%3C%2Fp%3E')%3B%0A%20%20%7D%0A%3C%2Fscript%3E%3Cnoscript%3E%3Cp%20id%3Dtest%20class%3DFAIL%3EFAIL%20(noscript)%3C%2Fp%3E%3C%2Fnoscript%3E%0A> |
| 54 |
|
|
|
| 55 |
|
|
[CODE(char)[[[0x80000000]]]]〜[CODE(char)[[[0xFFFFFFFF]]]] |
| 56 |
|
|
だと、 [CODE(char)[[[&]]]] を除く[[文字列]]がそのまま[[文字データ]]として解釈されます。 |
| 57 |
|
|
|
| 58 |
|
|
;; <http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cbody%3E%0A%3Cp%3E%26%23x80000000%3B%3C%2Fp%3E%0A%3Cscript%3E%0A%20%20var%20pv%20%3D%20document.getElementsByTagName%20('p')%5B0%5D.firstChild.data%3B%0A%20%20if%20(pv%20%3D%3D%20%22%5CuFFFD%22)%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DPASS%3EPASS%3C%2Fp%3E')%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DFAIL%3EFAIL%20(')%3B%0A%20%20%20%20for%20(var%20i%20%3D%200%3B%20i%20%3C%20pv.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20document.write%20(pv.charCodeAt%20(i).toString%20(16)%20%2B%20'%2C')%3B%0A%20%20%20%20%7D%0A%20%20%20%20document.write%20(')%3C%2Fp%3E')%3B%0A%20%20%7D%0A%3C%2Fscript%3E%3Cnoscript%3E%3Cp%20id%3Dtest%20class%3DFAIL%3EFAIL%20(noscript)%3C%2Fp%3E%3C%2Fnoscript%3E%0A> |
| 59 |
|
|
|
| 60 |
|
|
[CODE(char)[0x100000000]] 以上だと、下位8桁 (32ビット) 以外は無視されます。 |
| 61 |
|
|
|
| 62 |
|
|
;; |
| 63 |
|
|
<http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cbody%3E%0A%3Cp%3E%26%23x100000000%3B%3C%2Fp%3E%0A%3Cscript%3E%0A%20%20var%20pv%20%3D%20document.getElementsByTagName%20('p')%5B0%5D.firstChild.data%3B%0A%20%20if%20(pv%20%3D%3D%20%22%5CuFFFD%22)%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DPASS%3EPASS%3C%2Fp%3E')%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20document.write%20('%3Cp%20id%3Dresult%20class%3DFAIL%3EFAIL%20(')%3B%0A%20%20%20%20for%20(var%20i%20%3D%200%3B%20i%20%3C%20pv.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20document.write%20(pv.charCodeAt%20(i).toString%20(16)%20%2B%20'%2C')%3B%0A%20%20%20%20%7D%0A%20%20%20%20document.write%20(')%3C%2Fp%3E')%3B%0A%20%20%7D%0A%3C%2Fscript%3E%3Cnoscript%3E%3Cp%20id%3Dtest%20class%3DFAIL%3EFAIL%20(noscript)%3C%2Fp%3E%3C%2Fnoscript%3E%0A> |
| 64 |
|
|
|
| 65 |
|
|
[11] |
| 66 |
|
|
>>10 [[WinIE 6]] は∀ [CODE(char)[[[U+003F]]]] になるようです。 |
| 67 |
|
|
([[名無しさん]]) |
| 68 |
|
|
|
| 69 |
|
|
[12] |
| 70 |
|
|
>>10 [[Opera]] 9 は: |
| 71 |
|
|
|
| 72 |
|
|
[CODE(char)[[[U-00110000]]]]〜[CODE(char)[[[0xFFFFFFFF]]]] |
| 73 |
|
|
は[[サロゲート・ペア]]風のなにか ([[Firefox]] とは違います。) |
| 74 |
|
|
になります。 |
| 75 |
|
|
|
| 76 |
|
|
[CODE(char)[[[0xFFFFFFFF]]]] 以上は |
| 77 |
|
|
[CODE(char)[[[0xFFFFFFFF]]]] と同じ結果になります。 |
| 78 |
|
|
([[名無しさん]]) |
| 79 |
|
|
|
| 80 |
|
|
[13] |
| 81 |
|
|
>>10-12 いずれも[[文字長]]の制限はないように見えます。 |
| 82 |
|
|
([[名無しさん]]) |
| 83 |
|
|
|
| 84 |
|
|
[14] |
| 85 |
|
|
[CITE@en[XML Entity definitions for Characters]] ([CODE[2008-07-21 22:50:47 +09:00]] 版) <http://www.w3.org/TR/2008/WD-xml-entity-names-20080721/> |
| 86 |
|
|
([[名無しさん]]) |
| 87 |
|
|
|
| 88 |
|
|
|
| 89 |
|
|
[15] |
| 90 |
|
|
[CITE[Bug 4948 - Incorrect HTML entity error recovery doesn't match other browsers]] ([TIME[2008-07-31 09:44:14 +09:00]] 版) <https://bugs.webkit.org/show_bug.cgi?id=4948> |
| 91 |
|
|
([[名無しさん]]) |
| 92 |
|
|
|