mb_internal_encoding('utf-8');
$kana2romaji = new Kana2Romaji;
$str = "これは、ローマじへんかんのじっけんです";
$result = $kana2romaji->convert($str);
header("Content-type: text/html;charset=utf8");
echo $result;
class Kana2Romaji {
function convert($str){
$str = mb_convert_kana($str, "cHV", "utf-8");
$kana = array(
'きゃ', 'きぃ', 'きゅ', 'きぇ', 'きょ',
'ぎゃ', 'ぎぃ', 'ぎゅ', 'ぎぇ', 'ぎょ',
'くぁ', 'くぃ', 'くぅ', 'くぇ', 'くぉ',
'ぐぁ', 'ぐぃ', 'ぐぅ', 'ぐぇ', 'ぐぉ',
'しゃ', 'しぃ', 'しゅ', 'しぇ', 'しょ',
'じゃ', 'じぃ', 'じゅ', 'じぇ', 'じょ',
'ちゃ', 'ちぃ', 'ちゅ', 'ちぇ', 'ちょ',
'ぢゃ', 'ぢぃ', 'ぢゅ', 'ぢぇ', 'ぢょ',
'つぁ', 'つぃ', 'つぇ', 'つぉ',
'てゃ', 'てぃ', 'てゅ', 'てぇ', 'てょ',
'でゃ', 'でぃ', 'でぅ', 'でぇ', 'でょ',
'とぁ', 'とぃ', 'とぅ', 'とぇ', 'とぉ',
'にゃ', 'にぃ', 'にゅ', 'にぇ', 'にょ',
'ヴぁ', 'ヴぃ', 'ヴぇ', 'ヴぉ',
'ひゃ', 'ひぃ', 'ひゅ', 'ひぇ', 'ひょ',
'ふぁ', 'ふぃ', 'ふぇ', 'ふぉ',
'ふゃ', 'ふゅ', 'ふょ',
'びゃ', 'びぃ', 'びゅ', 'びぇ', 'びょ',
'ヴゃ', 'ヴぃ', 'ヴゅ', 'ヴぇ', 'ヴょ',
'ぴゃ', 'ぴぃ', 'ぴゅ', 'ぴぇ', 'ぴょ',
'みゃ', 'みぃ', 'みゅ', 'みぇ', 'みょ',
'りゃ', 'りぃ', 'りゅ', 'りぇ', 'りょ',
'うぃ', 'うぇ', 'いぇ'
);
$romaji = array(
'kya', 'kyi', 'kyu', 'kye', 'kyo',
'gya', 'gyi', 'gyu', 'gye', 'gyo',
'qwa', 'qwi', 'qwu', 'qwe', 'qwo',
'gwa', 'gwi', 'gwu', 'gwe', 'gwo',
'sya', 'syi', 'syu', 'sye', 'syo',
'ja', 'jyi', 'ju', 'je', 'jo',
'cha', 'cyi', 'chu', 'che', 'cho',
'dya', 'dyi', 'dyu', 'dye', 'dyo',
'tsa', 'tsi', 'tse', 'tso',
'tha', 'ti', 'thu', 'the', 'tho',
'dha', 'di', 'dhu', 'dhe', 'dho',
'twa', 'twi', 'twu', 'twe', 'two',
'nya', 'nyi', 'nyu', 'nye', 'nyo',
'va', 'vi', 've', 'vo',
'hya', 'hyi', 'hyu', 'hye', 'hyo',
'fa', 'fi', 'fe', 'fo',
'fya', 'fyu', 'fyo',
'bya', 'byi', 'byu', 'bye', 'byo',
'vya', 'vyi', 'vyu', 'vye', 'vyo',
'pya', 'pyi', 'pyu', 'pye', 'pyo',
'mya', 'myi', 'myu', 'mye', 'myo',
'rya', 'ryi', 'ryu', 'rye', 'ryo',
'wi', 'we', 'ye'
);
$str = $this->kana_replace($str, $kana, $romaji);
$kana = array(
'あ', 'い', 'う', 'え', 'お',
'か', 'き', 'く', 'け', 'こ',
'さ', 'し', 'す', 'せ', 'そ',
'た', 'ち', 'つ', 'て', 'と',
'な', 'に', 'ぬ', 'ね', 'の',
'は', 'ひ', 'ふ', 'へ', 'ほ',
'ま', 'み', 'む', 'め', 'も',
'や', 'ゆ', 'よ',
'ら', 'り', 'る', 'れ', 'ろ',
'わ', 'ゐ', 'ゑ', 'を', 'ん',
'が', 'ぎ', 'ぐ', 'げ', 'ご',
'ざ', 'じ', 'ず', 'ぜ', 'ぞ',
'だ', 'ぢ', 'づ', 'で', 'ど',
'ば', 'び', 'ぶ', 'べ', 'ぼ',
'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ'
);
$romaji = array(
'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', 'wyi', 'wye', 'wo', 'n',
'ga', 'gi', 'gu', 'ge', 'go',
'za', 'ji', 'zu', 'ze', 'zo',
'da', 'ji', 'du', 'de', 'do',
'ba', 'bi', 'bu', 'be', 'bo',
'pa', 'pi', 'pu', 'pe', 'po'
);
$str = $this->kana_replace($str, $kana, $romaji);
$str = preg_replace('/(っ$|っ[^a-z])/u', "xtu", $str);
$res = preg_match_all('/(っ)(.)/u', $str, $matches);
if(!empty($res)){
for($i=0;isset($matches[0][$i]);$i++){
if($matches[0][$i] == 'っc') $matches[2][$i] = 't';
$str = preg_replace('/' . $matches[1][$i] . '/u', $matches[2][$i], $str, 1);
}
}
$kana = array(
'ぁ', 'ぃ', 'ぅ', 'ぇ', 'ぉ',
'ヵ', 'ヶ', 'っ', 'ゃ', 'ゅ', 'ょ', 'ゎ', '、', '。', ' '
);
$romaji = array(
'a', 'i', 'u', 'e', 'o',
'ka', 'ke', 'xtu', 'xya', 'xyu', 'xyo', 'xwa', ', ', '.', ' '
);
$str = $this->kana_replace($str, $kana, $romaji);
$str = preg_replace('/^ー|[^a-z]ー/u', '', $str);
$res = preg_match_all('/(.)(ー)/u', $str, $matches);
if($res){
for($i=0;isset($matches[0][$i]);$i++){
if( $matches[1][$i] == "a" ){ $replace = 'â'; }
else if( $matches[1][$i] == "i" ){ $replace = 'î'; }
else if( $matches[1][$i] == "u" ){ $replace = 'û'; }
else if( $matches[1][$i] == "e" ){ $replace = 'ê'; }
else if( $matches[1][$i] == "o" ){ $replace = 'ô'; }
else { $replace = ""; }
$str = preg_replace('/' . $matches[0][$i] . '/u', $replace, $str, 1);
}
}
return $str;
}
function kana_replace($str, $kana, $romaji){
$patterns = array();
foreach($kana as $value){
$patterns[] = "/" . $value . "/";
}
$str = preg_replace($patterns, $romaji, $str);
return $str;
}
}
なるほど、プログラムの中に辞書を作っておいて、変換してる訳ね。