【PHP】これで分かる関数! – マルチバイト –

PHP

更新履歴

更新日更新者更新内容
2021/7/3JJI関数の記事が長いため、関数の記事は分割
分割に伴い、リンク先の修正

はじめに

PHPの場合、文字列は1バイト単位で処理するため、日本語のように1バイトで表示できないマルチバイト文字は次の記事で説明した文字列関数では正しく処理ができない場合があります。

そのため、PHPではマルチバイト文字で処理できるマルチバイト関数が提供されています。
この記事では、よく使用するマルチバイト関数についてサンプルプログラムで使って説明します。

文字列関数とマルチバイト関数で同じ処理を行うものがあり、どちらの関数を使用した方がよいのか迷う場合、マルチバイト関数を使用してください。
マルチバイト関数であれば、バイト単位(シングルバイト)、マルチバイトの両方で正しく処理ができます。

補足

マルチバイト文字の補足です。
文字コードについて詳しい内容のため、理解が難しいかもしれません。
今、理解できなくても問題はないため、参考程度で見てください。

最初にシングルバイト文字とマルチバイト文字について説明します。

文字説明
シングルバイト文字1バイト=8ビット、8ビットは2の8乗のため、256文字を
表現することができる。
半角英字・数字・記号は1バイトで表示できる。
マルチバイト文字1バイトで表示できないひらがな、カタカナ、漢字などの日本語は
2バイト以上を使用して表示する。

次によく使用するUTF-8(ユーティーエフエイト)の話です。

UTF-8は全世界の文字を一つの文字コードで表現するUNICODE(ユニコード)の規格で決められた文字コードです。
UNICODE(ユニコード)の中にはUTF-8以外にUTF-16、UTF-32などの文字コードがあります。
UTF-8の場合、一般的に半角の英数字・記号は1バイト、それ以外のひらがな・漢字などは3バイトが使用されます。
例えば、UTF-8の”あa”の文字をバイト単位で計算すると、4バイトになります。

文字コードの詳細は次のWikipediaを見てください。

文字コード - Wikipedia

UNICODEの詳細は次のWikipediaを見てください。

Unicode - Wikipedia

よく使用する関数

マルチバイト文字でよく使用する関数は次の通りです。
表で”○”の箇所がよく使用する関数になります。
“●”の箇所も使用することが多いのですが、正規表現に関係するため、正規表現の記事で説明します。

No関数文字列関数よく
使用する
説明(PHPマニュアル抜粋)
1mb_check_encoding     文字列が、指定したエンコーディングで有効なものかどうかを調べる
2mb_chrchrUnicode のコードポイントに対応する文字を返す
3mb_convert_case  文字列に対してケースフォールディングを行う
4mb_convert_encoding 文字エンコーディングを変換する
5mb_convert_kana カナを(“全角かな”、”半角かな”等に)変換する
6mb_convert_variables  変数の文字コードを変換する
7mb_decode_mimeheader  MIME ヘッダフィールドの文字列をデコードする
8mb_decode_numericentity  HTML 数値エンティティを文字にデコードする
9mb_detect_encoding  文字エンコーディングを検出する
10mb_detect_order  文字エンコーディング検出順序を設定あるいは取得する
11mb_encode_mimeheader  MIMEヘッダの文字列をエンコードする
12mb_encode_numericentity  文字を HTML 数値エンティティにエンコードする
13mb_encoding_aliases  既知のエンコーディング・タイプのエイリアスを取得
14mb_ereg_match マルチバイト文字列が正規表現に一致するか調べる
15mb_ereg_replace_callback  マルチバイト文字列にコールバック関数を用いた正規表現による置換を行う
16mb_ereg_replace マルチバイト文字列に正規表現による置換を行う
17mb_ereg_search_getpos  次の正規表現検索を開始する位置を取得する
18mb_ereg_search_getregs  マルチバイト文字列が正規表現に一致する部分があるか調べる
19mb_ereg_search_init  マルチバイト正規表現検索用の文字列と正規表現を設定する
20mb_ereg_search_pos  指定したマルチバイト文字列が正規表現に一致する部分の位置と長さを返す
21mb_ereg_search_regs  指定したマルチバイト文字列が正規表現に一致する部分を取得する
22mb_ereg_search_setpos  次の正規表現検索を開始する位置を設定する
23mb_ereg_search 指定したマルチバイト文字列が正規表現に一致するか調べる
24mb_ereg マルチバイト対応の正規表現マッチ
25mb_eregi_replace  マルチバイト文字列に大文字小文字を区別せずに正規表現による置換を行う
26mb_eregi  マルチバイトをサポートし、大文字小文字を無視した正規表現マッチ
27mb_get_info  mbstring の内部設定値を取得する
28mb_http_input  HTTP 入力文字エンコーディングを検出する
29mb_http_output  HTTP 出力文字エンコーディングを設定あるいは取得する
30mb_internal_encoding  内部文字エンコーディングを設定あるいは取得する
31mb_language  現在の言語を設定あるいは取得する
32mb_list_encodings  サポートするすべてのエンコーディングの配列を返す
33mb_ordord 文字の Unicode コードポイントを取得する
34mb_output_handler  出力バッファ内で文字エンコーディングを変換するコールバック関数
35mb_parse_strparse_str GET/POST/COOKIE データをパースし、グローバル変数を設定する
36mb_preferred_mime_name  MIME 文字設定を文字列で得る
37mb_regex_encoding  現在のマルチバイト正規表現用のエンコーディングを取得または設定する
38mb_regex_set_options  マルチバイト正規表現関数のデフォルトオプションを取得または設定する
39mb_scrub  文字列に含まれる不正なバイト列を代替文字に置き換える
40mb_send_mail  エンコード変換を行ってメールを送信する
41mb_split マルチバイト文字列を正規表現により分割する
42mb_str_splitstr_splitマルチバイト文字列を受取り、文字の配列を返す
43mb_strcut  文字列の一部を得る
44mb_strimwidth  指定した幅で文字列を丸める
45mb_striposstripos 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す
46mb_stristrstristr 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す
47mb_strlenstrlen ○文字列の長さを得る
48mb_strposstrpos文字列の中に指定した文字列が最初に現れる位置を見つける
49mb_strrchrstrrchr 別の文字列の中で、ある文字が最後に現れる場所を見つける
50mb_strrichr  大文字小文字を区別せず、 別の文字列の中である文字が最後に現れる場所を探す
51mb_strriposstrripos 大文字小文字を区別せず、 文字列の中で指定した文字列が最後に現れる位置を探す
52mb_strrposstrrpos 文字列の中に指定した文字列が最後に現れる位置を見つける
53mb_strstrstrstr文字列の中で、指定した文字列が最初に現れる位置を見つける
54mb_strtolowerstrtolower文字列を小文字にする
55mb_strtoupperstrtoupper文字列を大文字にする
56mb_strwidth  文字列の幅を返す
57mb_substitute_character  置換文字を設定あるいは取得する
58mb_substr_countsubstr_count 部分文字列の出現回数を数える
59mb_substrsubstr文字列の一部を得る

マルチバイト関数の詳細は次のPHPマニュアルを見てください。

PHP: マルチバイト文字列 - Manual

マルチバイト関数その1

よく使用する次の関数について説明します。

  • mb_chr
  • mb_convert_encoding
  • mb_convert_kana

詳細はこちらを見てください。

マルチバイト関数その2

よく使用する次の関数について説明します。

  • mb_split
  • mb_str_split

詳細はこちらを見てください。

マルチバイト関数その3

よく使用する次の関数について説明します。

  • mb_strlen
  • mb_strpos
  • mb_strstr

詳細はこちらを見てください。

マルチバイト関数その4

よく使用する次の関数について説明します。

  • mb_strtolower
  • mb_strtoupper
  • mb_substr

詳細はこちらを見てください。

最後に

この記事では、マルチバイト関数について説明しました。
日本語を使用する場合、マルチバイト関数を使用するようにしてください。

コメント