Re: simple katakana to romaji converter function
| From: | Lapo Luchini | Date: | Thu, 02 Jun 2005 01:04:33 +0000 |
| Subject: | Re: simple katakana to romaji converter function | ||
| References: | 1 | Groups: | php.i18n |
| Request: | Send a blank email to php-i18n+get-866@lists.php.net to get a copy of this message | ||
Gary Ross wrote:
> I'm looking for a simple function to convert katakana to romaji in php.
> I don't want to use kakasi but pure php. It should be easy enough to
> write myself but if there is something already out there...
I solved the problem this way (I know, separating the string and using a
big "switch/case" on each char *may* be faster, as this tries to match
each character many times (one for each search string, I guess), but
this way is *WAY* more readable):
$k2r = array('/きゃ/' => 'kya', '/きゅ/' => 'kyu',
'/きょ/' => 'kyo', '/
しゃ/' => 'sha', '/しゅ/' => 'shu',
'/しょ/' => 'sho', '/ちゃ/' =>
'cha', '/ちゅ/' => 'chu', '/ちょ/' =>
'cho', '/にゃ/' => 'nya', '/にゅ/'
=> 'nyu', '/にょ/' => 'nyo', '/ひゃ/' =>
'hya', '/ひゅ/' => 'hyu', '/
ひょ/' => 'hyo', '/みゃ/' => 'mya',
'/みゅ/' => 'myu', '/みょ/' =>
'myo', '/りゃ/' => 'rya', '/りゅ/' =>
'ryu', '/りょ/' => 'ryo', '/ぎゃ/'
=> 'gya', '/ぎゅ/' => 'gyu', '/ぎょ/' =>
'gyo', '/じゃ/' => 'ja', '/じゅ
/' => 'ju', '/じょ/' => 'jo', '/ぢゃ/' =>
'ja', '/ぢゅ/' => 'ju', '/ぢょ
/' => 'jo', '/びゃ/' => 'bya', '/びゅ/' =>
'byu', '/びょ/' => 'byo', '/
ぴゃ/' => 'pya', '/ぴゅ/' => 'pyu',
'/ぴょ/' => 'pyo', '/あ/' => 'a', '/
い/' => 'i', '/う/' => 'u', '/え/' =>
'e', '/お/' => 'o', '/か/' =>
'ka', '/き/' => 'ki', '/く/' => 'ku',
'/け/' => 'ke', '/こ/' => 'ko', '/
さ/' => 'sa', '/し/' => 'shi', '/す/' =>
'su', '/せ/' => 'se', '/そ/' =>
'so', '/た/' => 'ta', '/ち/' => 'chi',
'/つ/' => 'tsu', '/て/' => 'te',
'/と/' => 'to', '/な/' => 'na', '/に/'
=> 'ni', '/ぬ/' => 'nu', '/ね/'
=> 'ne', '/の/' => 'no', '/は/' =>
'ha', '/ひ/' => 'hi', '/ふ/' => 'fu',
'/へ/' => 'he', '/ほ/' => 'ho', '/ま/'
=> 'ma', '/み/' => 'mi', '/む/'
=> 'mu', '/め/' => 'me', '/も/' =>
'mo', '/や/' => 'ya', '/ゆ/' => 'yu',
'/よ/' => 'yo', '/ら/' => 'ra', '/り/'
=> 'ri', '/る/' => 'ru', '/れ/'
=> 're', '/ろ/' => 'ro', '/わ/' =>
'wa', '/ゐ/' => 'wi', '/ゑ/' => 'we',
'/を/' => 'wo', '/ん/' => 'n', '/が/'
=> 'ga', '/ぎ/' => 'gi', '/ぐ/' =>
'gu', '/げ/' => 'ge', '/ご/' => 'go',
'/ざ/' => 'za', '/じ/' => 'ji', '/
ず/' => 'zu', '/ぜ/' => 'ze', '/ぞ/' =>
'zo', '/だ/' => 'da', '/ぢ/' =>
'ji', '/づ/' => 'zu', '/で/' => 'de',
'/ど/' => 'do', '/ば/' => 'ba', '/
び/' => 'bi', '/ぶ/' => 'bu', '/べ/' =>
'be', '/ぼ/' => 'bo', '/ぱ/' =>
'pa', '/ぴ/' => 'pi', '/ぷ/' => 'pu',
'/ぺ/' => 'pe', '/ぽ/' => 'po',
'/aa/' => 'ā', '/e[ei]/' => 'ē', '/ii/'
=> 'ī', '/o[ou]/' => 'ō', '/uu/'
=> 'ū');
function romaji($hiragana) {
global $k2r;
return preg_replace(array_keys($k2r), array_values($k2r), $kana);
}
--
L a p o L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /