創作サイト向けコンテンツ管理システム freo(フレオ)
ホーム
このサイトについて
サイトマップ
有償制作
お問い合わせ
サイト内検索
キーワード
freo
freoについて
機能紹介
設置方法
各種解説
プラグイン
サポート
ホーム
サポート
サポート
記事編集
記事を編集します。
編集フォーム
名前
設置URL
本文
Meifea様 こんにちは。 SmartyかjQueryを利用して|文字列《もじれつ》を<ruby><rb>文字列</rb><rp>(</rp><rt>もじれつ</rt><rp>)</rp></ruby>に変換できないかということですが。 当方はJQueryやJavaScriptにはあまり詳しくないので、Smartyのプラグインの機能を使って実現できないか試行錯誤してみました。 結果。以下のスクリプトで実現できました。 >|| if (preg_match_all("/[\||].+《.+》/um", $string, $matches)) { foreach ($matches as $match) { $str_ruby = preg_replace("/\|||/", "<ruby>", $match); $str_ruby = preg_replace("/《/", "<rp>(</rp><rt>", $str_ruby); $str_ruby = preg_replace("/》/", "</rt><rp>)</rp></ruby>", $str_ruby); } $count = count($str_ruby); for ($i = 0; $i < $count; $i++) { $matches[0][$i] = preg_quote($matches[0][$i], '/'); if (preg_match('/' . $matches[0][$i] . '/u', $string)) { $string = preg_replace('/' . $matches[0][$i] . '/um', $str_ruby[$i], $string); } } } ||< (ちょっと力技のような気もしますが・・・。もっとスマートな書き方がありましたら、どなたかご教授ください) ただし、上記スクリプトではMeifea様がおっしゃっていた文字数を超えたり文字列のバイト数が多かったりしたら動作をキャンセルという機能はつけていませんし、 (1行目のpreg_match_allでルビタグに変換するための文字列のセットが一通りそろっているか判定しているため) ルビタグの開始位置に挿入する|に関しては半角全角両方とも使えるようにしてありますが、 二重山括弧(《》)に関しましては、全角のみしか変換しないようにしてあります。 (理由は半角だと通常のhtmlタグ(<>)が二重に書かれているとブラウザに誤認されるためです) 上記スクリプトをSmartyのmodifierプラグインとして仕立て、変換表示のテストページを当方のサイトに掲載してありますので、ご参考までにご覧いただければ幸いです。 http://holydragoon.jp/freotips/php/ruby_replace freoTIPS ~ Smarty用プラグイン『ルビタグ変換プラグイン』のテスト ~ | 龍の棲む場所
編集キー(投稿時に設定したキーを入力してください。)
コンテンツ
新規投稿