更新履歴
更新日 | 更新者 | 更新内容 |
---|---|---|
2021/7/3 | JJI | 関数の記事が長いため、関数の記事は分割 分割に伴い、リンク先の修正 |
はじめに
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を見てください。
UNICODEの詳細は次のWikipediaを見てください。

よく使用する関数
マルチバイト文字でよく使用する関数は次の通りです。
表で”○”の箇所がよく使用する関数になります。
“●”の箇所も使用することが多いのですが、正規表現に関係するため、正規表現の記事で説明します。
No | 関数 | 文字列関数 | よく 使用する | 説明(PHPマニュアル抜粋) |
---|---|---|---|---|
1 | mb_check_encoding | 文字列が、指定したエンコーディングで有効なものかどうかを調べる | ||
2 | mb_chr | chr | ○ | Unicode のコードポイントに対応する文字を返す |
3 | mb_convert_case | 文字列に対してケースフォールディングを行う | ||
4 | mb_convert_encoding | ○ | 文字エンコーディングを変換する | |
5 | mb_convert_kana | ○ | カナを(“全角かな”、”半角かな”等に)変換する | |
6 | mb_convert_variables | 変数の文字コードを変換する | ||
7 | mb_decode_mimeheader | MIME ヘッダフィールドの文字列をデコードする | ||
8 | mb_decode_numericentity | HTML 数値エンティティを文字にデコードする | ||
9 | mb_detect_encoding | 文字エンコーディングを検出する | ||
10 | mb_detect_order | 文字エンコーディング検出順序を設定あるいは取得する | ||
11 | mb_encode_mimeheader | MIMEヘッダの文字列をエンコードする | ||
12 | mb_encode_numericentity | 文字を HTML 数値エンティティにエンコードする | ||
13 | mb_encoding_aliases | 既知のエンコーディング・タイプのエイリアスを取得 | ||
14 | mb_ereg_match | ● | マルチバイト文字列が正規表現に一致するか調べる | |
15 | mb_ereg_replace_callback | マルチバイト文字列にコールバック関数を用いた正規表現による置換を行う | ||
16 | mb_ereg_replace | ● | マルチバイト文字列に正規表現による置換を行う | |
17 | mb_ereg_search_getpos | 次の正規表現検索を開始する位置を取得する | ||
18 | mb_ereg_search_getregs | マルチバイト文字列が正規表現に一致する部分があるか調べる | ||
19 | mb_ereg_search_init | マルチバイト正規表現検索用の文字列と正規表現を設定する | ||
20 | mb_ereg_search_pos | 指定したマルチバイト文字列が正規表現に一致する部分の位置と長さを返す | ||
21 | mb_ereg_search_regs | 指定したマルチバイト文字列が正規表現に一致する部分を取得する | ||
22 | mb_ereg_search_setpos | 次の正規表現検索を開始する位置を設定する | ||
23 | mb_ereg_search | ● | 指定したマルチバイト文字列が正規表現に一致するか調べる | |
24 | mb_ereg | ● | マルチバイト対応の正規表現マッチ | |
25 | mb_eregi_replace | マルチバイト文字列に大文字小文字を区別せずに正規表現による置換を行う | ||
26 | mb_eregi | マルチバイトをサポートし、大文字小文字を無視した正規表現マッチ | ||
27 | mb_get_info | mbstring の内部設定値を取得する | ||
28 | mb_http_input | HTTP 入力文字エンコーディングを検出する | ||
29 | mb_http_output | HTTP 出力文字エンコーディングを設定あるいは取得する | ||
30 | mb_internal_encoding | 内部文字エンコーディングを設定あるいは取得する | ||
31 | mb_language | 現在の言語を設定あるいは取得する | ||
32 | mb_list_encodings | サポートするすべてのエンコーディングの配列を返す | ||
33 | mb_ord | ord | 文字の Unicode コードポイントを取得する | |
34 | mb_output_handler | 出力バッファ内で文字エンコーディングを変換するコールバック関数 | ||
35 | mb_parse_str | parse_str | GET/POST/COOKIE データをパースし、グローバル変数を設定する | |
36 | mb_preferred_mime_name | MIME 文字設定を文字列で得る | ||
37 | mb_regex_encoding | 現在のマルチバイト正規表現用のエンコーディングを取得または設定する | ||
38 | mb_regex_set_options | マルチバイト正規表現関数のデフォルトオプションを取得または設定する | ||
39 | mb_scrub | 文字列に含まれる不正なバイト列を代替文字に置き換える | ||
40 | mb_send_mail | エンコード変換を行ってメールを送信する | ||
41 | mb_split | ○ | マルチバイト文字列を正規表現により分割する | |
42 | mb_str_split | str_split | ○ | マルチバイト文字列を受取り、文字の配列を返す |
43 | mb_strcut | 文字列の一部を得る | ||
44 | mb_strimwidth | 指定した幅で文字列を丸める | ||
45 | mb_stripos | stripos | 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す | |
46 | mb_stristr | stristr | 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す | |
47 | mb_strlen | strlen | ○ | 文字列の長さを得る |
48 | mb_strpos | strpos | ○ | 文字列の中に指定した文字列が最初に現れる位置を見つける |
49 | mb_strrchr | strrchr | 別の文字列の中で、ある文字が最後に現れる場所を見つける | |
50 | mb_strrichr | 大文字小文字を区別せず、 別の文字列の中である文字が最後に現れる場所を探す | ||
51 | mb_strripos | strripos | 大文字小文字を区別せず、 文字列の中で指定した文字列が最後に現れる位置を探す | |
52 | mb_strrpos | strrpos | 文字列の中に指定した文字列が最後に現れる位置を見つける | |
53 | mb_strstr | strstr | ○ | 文字列の中で、指定した文字列が最初に現れる位置を見つける |
54 | mb_strtolower | strtolower | ○ | 文字列を小文字にする |
55 | mb_strtoupper | strtoupper | ○ | 文字列を大文字にする |
56 | mb_strwidth | 文字列の幅を返す | ||
57 | mb_substitute_character | 置換文字を設定あるいは取得する | ||
58 | mb_substr_count | substr_count | 部分文字列の出現回数を数える | |
59 | mb_substr | substr | ○ | 文字列の一部を得る |
マルチバイト関数の詳細は次のPHPマニュアルを見てください。
マルチバイト関数その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
詳細はこちらを見てください。
最後に
この記事では、マルチバイト関数について説明しました。
日本語を使用する場合、マルチバイト関数を使用するようにしてください。
コメント