サンプル・プログラムの実行例
サンプル・プログラム
【使い方】に示しているように、[変換] ボタンを押すことで右側にルビ付きテキストが表示されるだろう。<ruby> タグがサポートされていない(IE以外のHTML5非対応ブラウザ)の場合、ルビは(...)のように表示される。
解説:辞書ファイル
ダウンロードしたZIPファイルに格納されているサンプル辞書ファイル "dictionary.txt" のように、対象となる文字と読み仮名をタブ区切りで記述する。
対象文字は漢字だけでなく、ひらがなや半角英数字でもかまわない。
一般的に、ルビはテキストの中で最初にあらわれる対象文字にのみ振られる。
ただ、2回目以降も振りたい場合があるかもしれないので、定数 FLAG_ONCE で制御できるようにしてある。
解説:ルビ振り
0217: /**
0218: * ルビを振る
0219: * @param string $str対象文字列(1行)
0220: * @return stringルビ振りテキスト
0221: */
0222: function addRuby($str) {
0223: global $Dictionary;
0224:
0225: foreach($Dictionary as $word=>$ruby) {
0226: //まだルビが振られていない単語にルビを振る
0227: if (! $ruby['flag']) {
0228: $pat = "/({$word})/ui";
0229: $rep =<<< EOT
0230: <ruby>
0231: <rb>$1</rb>
0232: <rp style="color:blue;">(</rp>
0233: <rt style="font-size:60%; color:blue;">{$ruby['word']}</rt>
0234: <rp style="color:blue;">)</rp>
0235: </ruby>
0236:
0237: EOT;
0238: //初回登場のみルビ振り
0239: if (FLAG_ONCE) {
0240: $str2 = preg_replace($pat, $rep, $str, 1);
0241: if ($str != $str2) {
0242: $Dictionary[$word]['flag'] = TRUE;
0243: $str = $str2;
0244: }
0245: //2回目以降もルビ振り
0246: } else {
0247: $str = preg_replace($pat, $rep, $str);
0248: }
0249: }
0250: }
0251: return $str;
0252: }
ルビ振りの実体は、正規表現を使った文字列置換関数 preg_replace である。
このため、原文にHTMLテキストを指定した場合、alt属性の中にパターン・マッチングする文字列があると、それもルビ振りしてしまうという弱点がある。
ルビにまつわる雑学
7号は5.25ポイントに相当するが、イギリスから輸入された5.25ポイント・サイズの活字の呼び名が宝石の ruby(ルビー)であったことから、ルビと呼ばれるようになった。
19世紀後半のイギリスでは、4.5ポイントは diamond(ダイヤモンド)、5ポイントは pearl(真珠)といった具合に、活字の大きさに対して宝石の名前を付けていた。
スクリプト言語としてPHPと人気を二分する Ruby であるが、開発者まつもとひろゆきの同僚の誕生日が7月であったことから、7月の誕生石ルビーの名が冠せられた。
参考サイト
- PHPでテキストにルビを振る:ぱふぅ家のホームページ
- HTMLタグ/テキスト・フォントタグ/ルビ(ふりがな)を付ける(TAG index Webサイト)
- 非表示のinput要素ではクリップボードへのコピーが行われなかった:たくましゅくじょ
これまでもInternetExplorerではルビがサポートされていたが、HTML5で正式に <ruby> タグがサポートされたので、今回はPHPを用いてテキストにルビを振るプログラムを作ってみることにする。
(2021年7月10日)PHP8対応,リファラ・チェック追加,大幅改訂