こんにちは、Ryohei(@ityryohei)です!

本記事では、機種依存文字のローマ数字をアルファベットに置換する方法をご紹介しています。

ローマ数字や丸囲み数字、省略文字などは一般的に機種依存文字と呼ばれています。機種依存文字は特定の環境でしか表示されない文字の総称です。

機種依存文字はWebサイト上で表示する場合(文字コードがUTF-8の場合)は問題ないのですが、PHPで作成したフォーム経由で送信した際に「???」のように文字化けすることがあります。

すべての機種依存文字に対応し、文字化けを完全になくすことは難しいですが、入力が予測される文字(本記事ではローマ数字)であれば大幅にプログラムを改修せずに対策することが可能です。

本記事では対策の一例として、ローマ数字をアルファベットに置換して対応する方法をご紹介していきたいと思います。

では、解説していきます。

対策するローマ数字

本記事では下記の機種依存文字をアルファベットに置換します。ローマ数字をアルファベットの「I、V、X」に置き換えます。

置換前:ⅠⅡⅢ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ

置換後:I II III IV V VI VII VIII IX X

字面は少し変わりますが、文字化けで表示されるよりは幾分ましではないでしょうか。上記では「1~10」までのローマ数字を例としていますが、値はそれぞれ調整していただければと思います。

続いてローマ数字をアルファベットに置換する処理を作っていきます。

ローマ数字をアルファベットに置換する

では実際に置換する処理を組んでいきます。

といっても処理自体はPHP組み込み関数の「str_replace()」がやってくれますので、引数となる対象の文字列と、置換前・置換後のローマ数字の配列とアルファベットの配列を用意してあげるだけで済みます。

ローマ数字をアルファベットの数字に置換するサンプルは下記の通りです。

$target = "アルファマンションⅢ番館";
$before = array("Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ");
$after = array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X");
$result = str_replace($before, $after, $target);

上記では対象の文字列の中にローマ数字が含まれているかを検索し、含まれていればアルファベットに置換する、といった処理となります。これだけでローマ数字の文字化けを解消することができるので便利なものです。値はそれぞれの環境に合わせて変更してご利用くださいね。

最後に

本記事でご紹介した内容はローマ数字をアルファベットに変換する以外にも、単純な文字列に置換にも応用することができます。

str_replace()」ちゃんは使いやすい有能な関数ですので、ドキュメントなしに使えるようにしておくと良いかもですね!

以上、PHPで機種依存文字のローマ数字をアルファベットに置換する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。