マルチバイトでつまづいた
日本語フォントの中でも、半角環境で使える日本語フォントがあります。
日本語キーボードの、それぞれのキーに対応している英語を入れれば出るようになっています。
一時期私もフォントを作るのを趣味としていたことがあります(またつくりたい!)。
それでカタカナのフォントを作っていたのですが、上のように、エセ日本語フォントでした。
今、それを利用して、PHPのGDで、加工された文字が出てくるコンテンツを作ろうとしているのですが
日本語を、そのエセ日本語フォントに対応した文字列に変換して描画しようと思っています。
それでうまくいかない!
【説明用・簡易版】 <?php $new_str = ""; for($i=0; $i<mb_strlen($str); $i++){ $c = mb_substr($str,$i,1); $new_str .= $this->convert($c); } echo $new_str; ?>
ってやろうとしていますが、
mb_substrで切り分けた文字列を、出力以外のもの・・・変換にかけようとすると
Cの知識で想像するに、終端文字(\0的なもの)がくっつかなくて、駄目なのかなーと想像してみました。
もうめんどくさいから、普通の日本語フォントとして、ttfファイル自体を書き直して作ろうかなぁw
ConvertSBKana.class.php【動かない】 <?php class ConvertSBKana { private $xtu_str = ""; private $zu_str = ""; private $wo_str = ""; private $pa_str = ""; private $pi_str = ""; private $pu_str = ""; private $pe_str = ""; private $po_str = ""; function ConvertKatakana() { } function getName($name_mb){ $len = mb_strlen($name_mb); $res = ""; for($i=0; $i<$len; $i++){ $c = mb_substr($name_mb,$i,1,"utf-8"); $res .= $this->kana2Alphabet($c); } echo $res; return $res; } function setxtu($str){ $this->xtu_str = $str; } function setzu($str){ $this->zu_str = $str; } function setwo($str){ $this->wo_str = $str; } function setpa($str){ $this->pa_str = $str; } function setpi($str){ $this->pi_str = $str; } function setpu($str){ $this->pu_str = $str; } function setpe($str){ $this->pe_str = $str; } function setpo($str){ $this->po_str = $str; } function ifKana($str){ if($this->kana2Alphabet($str) === false){ return false; } else { return true; } } function kana2Alphabet($kana){ switch($kana){ case "っ": case "ッ": return $this->xtu_str; case "づ": case "ヅ": return $this->zu_str; case "を": case "ヲ": return $this->wo_str; case "ぱ": case "パ": return $this->pa_str; case "ぴ": case "ピ": return $this->pi_str; case "ぷ": case "プ": return $this->pu_str; case "ぺ": case "ペ": return $this->pe_str; case "ぽ": case "ポ": return $this->po_str; default: return $this->kana2Alphabet_common($kana); } } function kana2Alphabet_common($kana){ echo $kana."<br>"; switch($kana){ case "あ": case "ア": return "3"; case "い": case "イ": return "e"; case "う": case "ウ": return "4"; case "え": case "エ": return "5"; case "お": case "オ": return "6"; case "か": case "カ": return "t"; case "き": case "キ": return "g"; case "く": case "ク": return "h"; case "け": case "ケ": return ":"; case "こ": case "コ": return "b"; case "さ": case "サ": return "x"; case "し": case "シ": return "d"; case "す": case "ス": return "r"; case "せ": case "セ": return "p"; case "そ": case "ソ": return "c"; case "た": case "タ": return "q"; case "ち": case "チ": return "a"; case "つ": case "ツ": return "z"; case "て": case "テ": return "w"; case "と": case "ト": return "s"; case "な": case "ナ": return "u"; case "に": case "ニ": return "i"; case "ぬ": case "ヌ": return "1"; case "ね": case "ネ": return ","; case "の": case "ノ": return "k"; case "は": case "ハ": return "f"; case "ひ": case "ヒ": return "v"; case "ふ": case "フ": return "2"; case "へ": case "ヘ": return "^"; case "ほ": case "ホ": return "-"; case "ま": case "マ": return "j"; case "み": case "ミ": return "n"; case "む": case "ム": return "]"; case "め": case "メ": return "/"; case "も": case "モ": return "m"; case "や": case "ヤ": return "7"; case "ゆ": case "ユ": return "8"; case "よ": case "ヨ": return "9"; case "ら": case "ラ": return "o"; case "り": case "リ": return "l"; case "る": case "ル": return "."; case "れ": case "レ": return ";"; case "ろ": case "ロ": return "\\";//////////////test case "わ": case "ワ": return "0"; case "を": case "ヲ": return "";////////////// case "ん": case "ン": return "y"; case "が": case "ガ": return "T"; case "ぎ": case "ギ": return "G"; case "ぐ": case "グ": return "H"; case "げ": case "ゲ": return "*"; case "ご": case "ゴ": return "B"; case "ざ": case "ザ": return "X"; case "じ": case "ジ": return "D"; case "ず": case "ズ": return "R"; case "ぜ": case "ゼ": return "P"; case "ぞ": case "ゾ": return "C"; case "だ": case "ダ": return "Q"; case "ぢ": case "ヂ": return "A"; case "づ": case "ヅ": return "";//////////// case "で": case "デ": return "W"; case "ど": case "ド": return "S"; case "ば": case "バ": return "F"; case "び": case "ビ": return "V"; case "ぶ": case "ブ": return "\"";/////test case "べ": case "ベ": return "~"; case "ぼ": case "ボ": return "="; case "ぁ"; case "ァ"; return "#"; case "ぃ"; case "ィ"; return "E"; case "ぅ"; case "ゥ"; return "$"; case "ぇ"; case "ェ"; return "%"; case "ぉ"; case "ォ"; return "&"; case "ゃ"; case "ャ"; return "\'"; case "ゅ"; case "ュ"; return "("; case "ょ"; case "ョ"; return ")"; case "っ"; case "ッ"; return "Z";/////////// case "ー": return "=";///////// default: return false; } } } ?>