質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

6388閲覧

PHPのファンクションでひらがなをローマ字に変換する関数を作りたい

aushijima

総合スコア55

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/10/11 23:45

編集2016/10/12 23:01

###前提・実現したいこと
PHPでひらがなからローマ字に変換するfunctionを作りたいと思っています。

###発生している問題・エラーメッセージ
しゅう とみとくは、単一仮名と複数仮名の順番を変えることで解決できたのですが、
ちょう ぎ という名前をcho_giと変換したいのですが、chou_giとなってしまいます。

###該当のソースコード
PHPで作っています。

PHP

1<?php 2 3 4function NamePlace($firstName,$lastName){ 5 6 $kana = array( 7 'きゃ', 'きぃ', 'きゅ', 'きぇ', 'きょ', 8 'ぎゃ', 'ぎぃ', 'ぎゅ', 'ぎぇ', 'ぎょ', 9 'くぁ', 'くぃ', 'くぅ', 'くぇ', 'くぉ', 10 'ぐぁ', 'ぐぃ', 'ぐぅ', 'ぐぇ', 'ぐぉ', 11 'しゃ', 'しぃ', 'しゅ', 'しぇ', 'しょ', 12 'じゃ', 'じぃ', 'じゅ', 'じぇ', 'じょ', 13 'ちゃ', 'ちぃ', 'ちゅ', 'ちぇ', 'ちょ', 14 'ぢゃ', 'ぢぃ', 'ぢゅ', 'ぢぇ', 'ぢょ', 15 'つぁ', 'つぃ', 'つぇ', 'つぉ', 16 'てゃ', 'てぃ', 'てゅ', 'てぇ', 'てょ', 17 'でゃ', 'でぃ', 'でぅ', 'でぇ', 'でょ', 18 'とぁ', 'とぃ', 'とぅ', 'とぇ', 'とぉ', 19 'にゃ', 'にぃ', 'にゅ', 'にぇ', 'にょ', 20 'ヴぁ', 'ヴぃ', 'ヴぇ', 'ヴぉ', 21 'ひゃ', 'ひぃ', 'ひゅ', 'ひぇ', 'ひょ', 22 'ふぁ', 'ふぃ', 'ふぇ', 'ふぉ', 23 'ふゃ', 'ふゅ', 'ふょ', 24 'びゃ', 'びぃ', 'びゅ', 'びぇ', 'びょ', 25 'ヴゃ', 'ヴぃ', 'ヴゅ', 'ヴぇ', 'ヴょ', 26 'ぴゃ', 'ぴぃ', 'ぴゅ', 'ぴぇ', 'ぴょ', 27 'みゃ', 'みぃ', 'みゅ', 'みぇ', 'みょ', 28 'りゃ', 'りぃ', 'りゅ', 'りぇ', 'りょ', 29 'うぃ', 'うぇ', 'いぇ', 30 'あ', 'い', 'う', 'え', 'お', 31 'か', 'き', 'く', 'け', 'こ', 32 'さ', 'し', 'す', 'せ', 'そ', 33 'た', 'ち', 'つ', 'て', 'と', 34 'な', 'に', 'ぬ', 'ね', 'の', 35 'は', 'ひ', 'ふ', 'へ', 'ほ', 36 'ま', 'み', 'む', 'め', 'も', 37 'や', 'ゆ', 'よ', 38 'ら', 'り', 'る', 'れ', 'ろ', 39 'わ', 'ゐ', 'ゑ', 'を', 'ん', 40 'が', 'ぎ', 'ぐ', 'げ', 'ご', 41 'ざ', 'じ', 'ず', 'ぜ', 'ぞ', 42 'だ', 'ぢ', 'づ', 'で', 'ど', 43 'ば', 'び', 'ぶ', 'べ', 'ぼ', 44 'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ' 45 ); 46 47 $romaji = array( 48 'kya', 'kyi', 'kyu', 'kye', 'kyo', 49 'gya', 'gyi', 'gyu', 'gye', 'gyo', 50 'qwa', 'qwi', 'qwu', 'qwe', 'qwo', 51 'gwa', 'gwi', 'gwu', 'gwe', 'gwo', 52 'sya', 'syi', 'syu', 'sye', 'syo', 53 'ja', 'jyi', 'ju', 'je', 'jo', 54 'cha', 'cyi', 'chu', 'che', 'cho', 55 'dya', 'dyi', 'dyu', 'dye', 'dyo', 56 'tsa', 'tsi', 'tse', 'tso', 57 'tha', 'ti', 'thu', 'the', 'tho', 58 'dha', 'di', 'dhu', 'dhe', 'dho', 59 'twa', 'twi', 'twu', 'twe', 'two', 60 'nya', 'nyi', 'nyu', 'nye', 'nyo', 61 'va', 'vi', 've', 'vo', 62 'hya', 'hyi', 'hyu', 'hye', 'hyo', 63 'fa', 'fi', 'fe', 'fo', 64 'fya', 'fyu', 'fyo', 65 'bya', 'byi', 'byu', 'bye', 'byo', 66 'vya', 'vyi', 'vyu', 'vye', 'vyo', 67 'pya', 'pyi', 'pyu', 'pye', 'pyo', 68 'mya', 'myi', 'myu', 'mye', 'myo', 69 'rya', 'ryi', 'ryu', 'rye', 'ryo', 70 'wi', 'we', 'ye', 71 'a', 'i', 'u', 'e', 'o', 72 'ka', 'ki', 'ku', 'ke', 'ko', 73 'sa', 'shi', 'su', 'se', 'so', 74 'ta', 'chi', 'tsu', 'te', 'to', 75 'na', 'ni', 'nu', 'ne', 'no', 76 'ha', 'hi', 'fu', 'he', 'ho', 77 'ma', 'mi', 'mu', 'me', 'mo', 78 'ya', 'yu', 'yo', 79 'ra', 'ri', 'ru', 're', 'ro', 80 'wa', 'wyi', 'wye', 'wo', 'n', 81 'ga', 'gi', 'gu', 'ge', 'go', 82 'za', 'ji', 'zu', 'ze', 'zo', 83 'da', 'ji', 'du', 'de', 'do', 84 'ba', 'bi', 'bu', 'be', 'bo', 85 'pa', 'pi', 'pu', 'pe', 'po' 86 ); 87 88 $firstReplace = str_replace($kana,$romaji,$firstName); 89 $lastReplace = str_replace($kana,$romaji,$lastName); 90 echo $firstReplace.'_'.$lastReplace; 91 92}

###試したこと
functionのみで作りたいのですが、調べたサイトなどは、classを使っていたので使わないで作りたいです。

http://php-archive.net/php/romaji/

上記サイトのものも試してみましたが、cho_giという出力にはならなかったです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/10/12 02:10

コードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
aushijima

2016/10/12 23:02

すみません。変更しました。
katsuya141

2016/10/13 00:45

どのような動きになって欲しいのか、もう少し情報が必要ですね。例えば ”ちょうちょう”はどのように変換されてほしいですか? a.chocho b.choucho c.そんなパタンを考慮する必要はない どれでしょう?
guest

回答5

0

ベストアンサー

振り仮名をローマ字に変換することはできません。ご質問では正式のローマ字(日本語のラテン文字表記)ではなく俗に「英語表記」「ヘボン式」などと呼ばれている書き方への変換のようですが、その場合も同じです。参考サイトでローマ字の基礎を勉強してください。
ローマ字あいうえお

ローマ字は仮名文字をABCに変換したものではありません。音声をABC表記にしたものです。これは英語表記でも同じです。しかし現代仮名遣いの振り仮名では音声を判定できないことがあり、このときは機械的な変換ができません。例えば、振り仮名の「こうし」は漢字表記が「行使」「格子」「光子」などだったら音声はコーシなので、ローマ字表記は kôsi、英語表記は koshi ですが、漢字表記が「子牛」だったら音声はコウシなので、ローマ字表記は kousi、英語表記は koushi です。

「太郎」をタロウではなくタローと書くようにすれば簡単なプログラムでローマ字表記にも英語表記にも変換できます。参考サイトにVBAのサンプルがあるので参考になると思います。
ローマ字変換プログラム

投稿2016/10/12 13:07

marimo7

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aushijima

2016/10/12 23:03

すみません。普段ローマ字をラテン]文字表記など意識して、使っていなかったので、あやふやになってました。上記サイトで勉強してみます。
guest

0

幾つか懸念がありますが大丈夫でしょうか?

  • ヘボン式ローマ字ではない
  • 促音「っ」が考慮されていない
  • 長音はアンダーバー?

普通 「ちょう」は「choh」や「cho-」ではないのでしょうか

  • 今回ご提示のローマ字は一部FEPで変換できません

投稿2016/10/12 01:20

yambejp

総合スコア117667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aushijima

2016/10/12 23:04

もう一度、課題を出してくれた人に確認してみます。ありがとうございました。
guest

0

ちょうというのを一律choに変換して良いのであれば、配列内ちょの定義より前に追加してあげればよいでしょう。

PHP

1function NamePlace($firstName,$lastName){ 2 3 $kana = array( 4 'きゃ', 'きぃ', 'きゅ', 'きぇ', 'きょ', 5 'ぎゃ', 'ぎぃ', 'ぎゅ', 'ぎぇ', 'ぎょ', 6 'くぁ', 'くぃ', 'くぅ', 'くぇ', 'くぉ', 7 'ぐぁ', 'ぐぃ', 'ぐぅ', 'ぐぇ', 'ぐぉ', 8 'しゃ', 'しぃ', 'しゅ', 'しぇ', 'しょ', 9 'じゃ', 'じぃ', 'じゅ', 'じぇ', 'じょ', 10 'ちょう', // 追加 11 'ちゃ', 'ちぃ', 'ちゅ', 'ちぇ', 'ちょ', 12 'ぢゃ', 'ぢぃ', 'ぢゅ', 'ぢぇ', 'ぢょ', 13 'つぁ', 'つぃ', 'つぇ', 'つぉ', 14 'てゃ', 'てぃ', 'てゅ', 'てぇ', 'てょ', 15 'でゃ', 'でぃ', 'でぅ', 'でぇ', 'でょ', 16 'とぁ', 'とぃ', 'とぅ', 'とぇ', 'とぉ', 17 'にゃ', 'にぃ', 'にゅ', 'にぇ', 'にょ', 18 'ヴぁ', 'ヴぃ', 'ヴぇ', 'ヴぉ', 19 'ひゃ', 'ひぃ', 'ひゅ', 'ひぇ', 'ひょ', 20 'ふぁ', 'ふぃ', 'ふぇ', 'ふぉ', 21 'ふゃ', 'ふゅ', 'ふょ', 22 'びゃ', 'びぃ', 'びゅ', 'びぇ', 'びょ', 23 'ヴゃ', 'ヴぃ', 'ヴゅ', 'ヴぇ', 'ヴょ', 24 'ぴゃ', 'ぴぃ', 'ぴゅ', 'ぴぇ', 'ぴょ', 25 'みゃ', 'みぃ', 'みゅ', 'みぇ', 'みょ', 26 'りゃ', 'りぃ', 'りゅ', 'りぇ', 'りょ', 27 'うぃ', 'うぇ', 'いぇ', 28 'あ', 'い', 'う', 'え', 'お', 29 'か', 'き', 'く', 'け', 'こ', 30 'さ', 'し', 'す', 'せ', 'そ', 31 'た', 'ち', 'つ', 'て', 'と', 32 'な', 'に', 'ぬ', 'ね', 'の', 33 'は', 'ひ', 'ふ', 'へ', 'ほ', 34 'ま', 'み', 'む', 'め', 'も', 35 'や', 'ゆ', 'よ', 36 'ら', 'り', 'る', 'れ', 'ろ', 37 'わ', 'ゐ', 'ゑ', 'を', 'ん', 38 'が', 'ぎ', 'ぐ', 'げ', 'ご', 39 'ざ', 'じ', 'ず', 'ぜ', 'ぞ', 40 'だ', 'ぢ', 'づ', 'で', 'ど', 41 'ば', 'び', 'ぶ', 'べ', 'ぼ', 42 'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ' 43 ); 44 45 $romaji = array( 46 'kya', 'kyi', 'kyu', 'kye', 'kyo', 47 'gya', 'gyi', 'gyu', 'gye', 'gyo', 48 'qwa', 'qwi', 'qwu', 'qwe', 'qwo', 49 'gwa', 'gwi', 'gwu', 'gwe', 'gwo', 50 'sya', 'syi', 'syu', 'sye', 'syo', 51 'ja', 'jyi', 'ju', 'je', 'jo', 52 'cho', // 追加 53 'cha', 'cyi', 'chu', 'che', 'cho', 54 'dya', 'dyi', 'dyu', 'dye', 'dyo', 55 'tsa', 'tsi', 'tse', 'tso', 56 'tha', 'ti', 'thu', 'the', 'tho', 57 'dha', 'di', 'dhu', 'dhe', 'dho', 58 'twa', 'twi', 'twu', 'twe', 'two', 59 'nya', 'nyi', 'nyu', 'nye', 'nyo', 60 'va', 'vi', 've', 'vo', 61 'hya', 'hyi', 'hyu', 'hye', 'hyo', 62 'fa', 'fi', 'fe', 'fo', 63 'fya', 'fyu', 'fyo', 64 'bya', 'byi', 'byu', 'bye', 'byo', 65 'vya', 'vyi', 'vyu', 'vye', 'vyo', 66 'pya', 'pyi', 'pyu', 'pye', 'pyo', 67 'mya', 'myi', 'myu', 'mye', 'myo', 68 'rya', 'ryi', 'ryu', 'rye', 'ryo', 69 'wi', 'we', 'ye', 70 'a', 'i', 'u', 'e', 'o', 71 'ka', 'ki', 'ku', 'ke', 'ko', 72 'sa', 'shi', 'su', 'se', 'so', 73 'ta', 'chi', 'tsu', 'te', 'to', 74 'na', 'ni', 'nu', 'ne', 'no', 75 'ha', 'hi', 'fu', 'he', 'ho', 76 'ma', 'mi', 'mu', 'me', 'mo', 77 'ya', 'yu', 'yo', 78 'ra', 'ri', 'ru', 're', 'ro', 79 'wa', 'wyi', 'wye', 'wo', 'n', 80 'ga', 'gi', 'gu', 'ge', 'go', 81 'za', 'ji', 'zu', 'ze', 'zo', 82 'da', 'ji', 'du', 'de', 'do', 83 'ba', 'bi', 'bu', 'be', 'bo', 84 'pa', 'pi', 'pu', 'pe', 'po' 85 ); 86 87 $firstReplace = str_replace($kana,$romaji,$firstName); 88 $lastReplace = str_replace($kana,$romaji,$lastName); 89 echo $firstReplace.'_'.$lastReplace; 90} 91

投稿2016/10/12 00:41

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aushijima

2016/10/12 23:06

コメントありがとうございます。一律では、ないと思うので今回は、もう少し違うやり方でやってみないといけない感じですね。
guest

0

str_replace()を正規表現一致preg_replace()に変え、$kana,$romajiの先頭に”ちょう$”、”cho”などを加えたらどうですか。

投稿2016/10/12 00:52

katsuya141

総合スコア367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aushijima

2016/10/12 23:04

試しにやってみますね。
guest

0

ちょう ぎ という名前をcho_giと変換したいのですが、chou_giとなってしまいます。

この部分は ひらがな→ローマ字変換の前に自前で変換しないといけないでしょう。

投稿2016/10/12 00:00

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aushijima

2016/10/12 23:06

自前で変換とは、どういうことですか?
Orlofsky

2016/10/18 23:27

function NamePlace を実行する前に ちょう ぎ → chou_gi で変換する必要があります。他の変換に影響がなければfunctionの中に追加しても良いでしょう。実用的な function にするためにはこのような変換は多数必要になるでしょうけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問