自然言語および文字エンコーディングマルチバイト文字列関数
- mb_check_encoding〔文字列が指定したエンコーディングで有効か調べる〕
- mb_convert_case〔文字列に対してケースフォルディングを行う〕
- mb_convert_encoding〔文字エンコーティングを変換する〕
- mb_convert_kana〔ひらがな、カタカナを全角⇔半角に変換〕
- mb_convert_variables〔変数の文字コードを変換する〕
- mb_decode_mimeheader〔MIMEヘッダの文字列をデコードする〕
- mb_detect_encoding〔文字エンコーディングを検出する〕
- mb_detect_order〔文字エンコーディング検出順序を設定・取得する〕
- mb_encode_mimeheader〔MIMEヘッダの文字列をエンコード〕
- mb_ereg〔マルチバイト対応の正規表現マッチング〕
- mb_ereg_match〔マルチバイト文字列が正規表現に一致するか調べる〕
- mb_ereg_replace〔マルチバイト文字列を正規表現で置換する〕
- mb_eregi〔マルチバイト対応の正規表現マッチング(大文字小文字の区別なし)〕
- mb_eregi_replace〔マルチバイト文字列を正規表現で置換する(大文字小文字の区別なし)〕
- mb_get_info〔mbstringの内部設定値を取得する〕
- mb_http_input〔HTTP入力文字エンコーディングを検出する〕
- mb_http_output〔HTTP出力文字エンコーディングを設定・取得する〕
- mb_internal_encoding〔内部文字エンコーディングを設定・取得する〕
- mb_language〔現在の言語を設定・取得する〕
- mb_list_encodings
〔サポートするすべてのエンコーディングの配列を返す〕
- mb_output_handler〔出力バッファ内で文字エンコーディングを変換するコールバック関数〕
- mb_parse_str〔GETデータをパースしてグローバル変数を設定する〕
- mb_preferred_mime_name〔MIME文字設定を文字列として取得する〕
- mb_regex_encoding〔現在のマルチバイト正規表現用のエンコーディングを文字列として返す〕
- mb_regex_set_options〔マルチバイト対応の正規表現関数のデフォルトオプションを取得・設定する〕
- mb_send_mail〔エンコード変換を行ってメールを送信する〕
- mb_split〔マルチバイト文字列を正規表現により分割する〕
- mb_split〔マルチバイト文字列を正規表現により分割〕
- mb_strcut〔文字列の一部を返す(指定バイト数分取出し)〕
- mb_strimwidth〔指定した幅で文字列を丸める〕
- mb_stripos
〔文字列の中で指定した文字列が最初に現れる位置を返す(大文字小文字の区別なし)〕
- mb_stristr
〔文字列の中で指定した文字列が最初に現れる位置を返す(大文字・小文字の区別なし)〕
- mb_strlen〔文字列の長さを取得する〕
- mb_strpos〔文字列の中で指定した文字列が最初に現われる位置を返す〕
- mb_strripos
〔文字列の中で指定した文字列が最後に現れる位置を返す(大文字小文字の区別なし)〕
- mb_strrpos〔文字列の中で指定した文字列が最後に現われる位置を返す〕
- mb_strstr
〔文字列の中で指定した文字列が最初に現れる位置を返す〕
- mb_strtolower〔文字列を小文字にする〕
- mb_strtoupper〔文字列を大文字にする〕
- mb_strwidth〔文字列の幅を返す〕
- mb_substitute_character〔置換文字を設定・取得する〕
- mb_substr〔文字列の一部を返す(指定文字数分取出し)〕
- mb_substr_count〔部分文字列の出現回数を数える〕
mb_check_encoding
文字列が指定したエンコーディングで有効か調べる
unknown
文字列が指定したエンコーディングで有効かどうかを調べ、有効な場合にTRUE、そうでない場合にFALSEを返します。 この関数は、不正なエンコーディングによる攻撃を防ぐのに役立ちます。
オプションの第1引数文字列には、調べるバイトストリームを指定します。 省略した場合は、リクエスト開始時からのすべての入力が対象となります。
オプションの第2引数エンコーディングには、期待するエンコーディングを指定します。
<?
##### エンコーディングチェック
function checkEncoding($string, $string_encoding){
$fs=$string_encoding=='UTF-8' ? 'UTF-32' : $string_encoding;
$ts=$string_encoding=='UTF-32' ? 'UTF-8' : $string_encoding;
return $string===mb_convert_encoding ( mb_convert_encoding ( $string, $fs, $ts ), $ts, $fs );
}
### test 1
$string="\x00\x81";
$encoding="Shift_JIS";
if(true===mb_check_encoding($string, $encoding)){
echo 'valid ('.$encoding.') encoded byte stream!<br>';
}else{
echo 'invalid ('.$encoding.') encoded byte stream!<br>';
}
if(true===checkEncoding($string, $encoding)){
echo 'valid ('.$encoding.') encoded byte sequence!<br>';
}else{
echo 'invalid ('.$encoding.') encoded byte sequence!<br>';
}
/*
invalid (Shift_JIS) encoded byte stream!
invalid (Shift_JIS) encoded byte sequence!
*/
### test 2
$string="\x00\xE3";
$encoding="UTF-8";
if(true===mb_check_encoding ($string, $encoding)){
echo 'valid ('.$encoding.') encoded byte stream!<br>';
}else{
echo 'invalid ('.$encoding.') encoded byte stream!<br>';
}
if(true===checkEncoding($string, $encoding)){
echo 'valid ('.$encoding.') encoded byte sequence!<br>';
}else{
echo 'invalid ('.$encoding.') encoded byte sequence!<br>';
}
/*
invalid (UTF-8) encoded byte stream!
invalid (UTF-8) encoded byte sequence!
*/
?>
mb_convert_case
文字列に対してケースフォルディングを行う
unknown
モードに指定した変換モードで、文字列に対して、ケースフォルディングを行った結果を返します。
第2引数変換モードには、MB_CASE_UPPER(すべて大文字にする)、MB_CASE_LOWER(すべて小文字にする)、MB_CASE_TITLE(単語の先頭だけ大文字にする)のいずれかを指定することができます。
オプションの第3引数エンコーディングには、文字エンコーディングを指定します。
省略した場合は、内部文字エンコーディング(mb_internal_encoding()
)が適用されます。
<?
$str = "mary had a Little lamb and she loved it so";
echo mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
// MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
echo mb_convert_case($str, MB_CASE_LOWER, "UTF-8");
// mary had a little lamb and she loved it so
echo mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
// Mary Had A Little Lamb And She Loved It So
?>
mb_convert_encoding
文字エンコーティングを変換する
unknown
この関数は、SQL文をエンコードするのに便利です。 指定した文字列をfrom_encodeingからto_encodingに変換します。 第2引数to_encodingには、変換後の文字エンコーディングを指定します。
オプションの第3引数from_encodingには、変換前の文字エンコーティングを指定します。 変換前の文字エンコーティングを複数指定する場合は、配列、またはカンマ区切りで指定します。 省略した場合は、内部エンコーティング(デフォルト)が使用されます。
<?
$sql = "SELECT * FROM tablename WHRER name='hoge'";
//内部エンコーディングからSJISに変換
$sql = mb_convert_encoding($sql, "SJIS");
//内部エンコーディング EUC-JP → UTF-7に変換
$sql = mb_convert_encoding($sql, "UTF-7", "EUC-JP");
//内部エンコーディングを JIS, SJIS の順番で自動検出し、EUC-JPに変換
$sql = mb_convert_encoding($sql, "EUC-JP", "JIS, SJIS");
//内部エンコーディングに "auto" を指定すると
//"ASCII,JIS,UTF-8,EUC-JP,SJIS" の順番で自動検出される
$sql = mb_convert_encoding($sql, "EUC-JP", "auto");
?>
mb_convert_kana
ひらがな、カタカナを全角⇔半角に変換
unknown
指定した文字列を変換オプションの指定に基づき全角⇔半角に変換して返します。
オプションの第2引数変換オプションのデフォルトは'KV'(半角カタカナ→全角カタカナ、濁点付きの文字を1文字に変換)。 変換オプションは単体ではなく組合せて指定します。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
変換オプション | 内容 |
---|---|
r | 全角英字→半角英字 |
R | 半角英字→全角英字 |
n | 全角数字→半角数字 |
N | 半角数字→全角数字 |
a | 全角英数字→半角英数字 |
A | 半角英数字→全角英数字 |
s | 全角スペース→半角スペース |
S | 半角スペース→全角スペース |
k | 全角カナ→半角カナ |
K | 半角カナ→全角カナ |
h | 全角かな→半角カナ |
H | 半角カナ→全角かな |
c | 全角カナ→全角かな |
C | 全角かな→全角カナ |
V | 濁点付きの文字を1文字に変換。'K'、'H'と組合せて使用。 |
<?
#全角かな→全角カナ
$str = "あいうえお";
$str = mb_convert_kana($str, "KVC");
echo $str."<br>"; //アイウエオ
#半角カナ→全角カナ、全角英数字→半角英数字
$str = "アイウエオABCde";
$str = mb_convert_kana($str, "KVa");
echo $str."<br>"; //アイウエオABCde
#半角スペース→全角スペース
$str = "日本 花子";
$str = mb_convert_kana($str, "KVS");
echo $str."<br>"; //日本 花子
?>
mb_convert_variables
変数の文字コードを変換する
unknown
変数の文字エンコーティングをfrom_encodingからto_encodingに変換します。 成功した場合は、変換前の文字エンコーディングを返します。 失敗した場合はFALSEを返します。
この関数は、エンコーディング検出は短い文字列で失敗することがあるため、エンコーディング検出のために配列またはオブジェクトの文字列を結合します。 1つの配列またはオブジェクトで異なるエンコーディングを混在させることはできません。
第1引数to_encodingには、文字列の変換後のエンコーディングを指定します。
第2引数from_encodingには、'ASCII,UTF-8,SJIS-win'のようにカンマ区切りまたは配列でエンコーディングの検出を試みるエンコーディングを指定します。 省略した場合は、detect_orederが適用されます。
第3引数var以降の引数には、変換する変数(文字列、配列、オブジェクト)を指定します。 すべての引数が同じエンコーディングである必要があります。
<?
###### 変数 $post1, $post2 を内部エンコーディングに変換する
$interenc = mb_internal_encoding();
$inputenc = mb_convert_variables($interenc, "ASCII,UTF-8,SJIS-win", $post1, $post2); // ASCII
?>
mb_decode_mimeheader
MIMEヘッダの文字列をデコードする
unknown
エンコードされたMIMEヘッダの文字列をデコードし、内部文字エンコーディングでデコードされた文字列を返します。
<?
$name = "日本はなこ";
$mbox = "kru";
$doma = "gtinn.mon";
# MIMEヘッダの文字列をエンコード
$addr = mb_encode_mimeheader($name, "UTF-7", "Q") . " <" . $mbox . "@" . $doma . ">";
echo $addr; // =?UTF-7?Q?+AOYAlwClAOYAnACsAOMAgQCvAOMAgQCqAOMAgQCT-?=
# MIMEヘッダの文字列をデコード
$addr_turn=mb_decode_mimeheader($addr);
echo $addr_turn; // 日本はなこ
?>
mb_detect_encoding
文字エンコーディングを検出する
unknown
文字列の文字エンコーディングを検出して返します。
オプションの第2引数エンコーディングリストには、エンコーディングの検出順序を配列またはカンマ区切りで指定します。 省略した場合は、mb_detect_order()が適用されます。
<?php
# 現在のdetect_orderで文字エンコーディングを検出
echo mb_detect_encoding($str)."\n"; // ASCII
# "auto" は "ASCII,JIS,UTF-8,EUC-JP,SJIS"に展開されます
echo mb_detect_encoding($str, "auto")."\n"; // ASCII
# カンマ区切りのリストで encoding_list 文字エンコーディングを指定
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win")."\n"; // JIS
# encoding_list を指定するために配列を使用
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
echo mb_detect_encoding($str, $ary)."\n"; // ASCII
?>
mb_detect_order
文字エンコーディング検出順序を設定・取得する
unknown
自動文字エンコーディングの検出順序をエンコーディングリストに設定します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
エンコーディングリスト省略した場合は、現在の文字エンコーディング検出順序を返します。
オプションの第1引数エンコーディングリストには、配列またはカンマ区切りで文字エンコーディングを指定します。 「auto」を指定すると、「ASCII, JIS, UTF-8, EUC-JP, SJIS」に展開されます。
mbstringで現在実装されているのは、下記のエンコーディングを検出するフィルタです。 下記のエンコーディングで無効なバイトシーケンスがあると、エンコーディングの検出は失敗します。
UTF-8、UTF-7、ASCII、EUC-JP,SJIS、eucJP-win、SJIS-win、JIS、ISO-2022-JP
※ISO-8859-*の場合、mbstringは常にISO-8859-*として検出します。
<?
# リストで検出順を設定
mb_detect_order("eucjp-win,sjis-win,UTF-8");
# 配列で検出順を設定
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
mb_detect_order($ary);
# 現在の検出順を表示
echo implode(", ", mb_detect_order()); // ASCII, JIS, EUC-JP
?>
mb_encode_mimeheader
MIMEヘッダの文字列をエンコード
unknown
指定した文字列を、MIMEヘッダエンコーディング方式でエンコードして返します。 この関数はASCII表現の文字列を返します。
オプションの第2引数文字コードは、現在のNLS設定(mbstring.language)によって決まります。 mb_internal_encoding()を同じエンコーディングに設定しておく必要があります。
オプションの第3引数transfer_encodingには、MIMEエンコーディング方式を指定します。 「B」(BASE64)または「Q」(Quoted-Printable)のいずれかを指定します。 省略した場合は、デフォルトの「B」が適用されます。
オプションの第4引数linefeedはEOL(行末)のマーカーで、改行する際に使用します。
デフォルトは「CRLF」(\r\n
)です。
オプションの第5引数indent(PHP v5.0.0~)には、最初の行の字下げ(ヘッダで文字列の前に置く文字数)を指定します。
<?
$name = "日本はなこ";
$mbox = "kru";
$doma = "gtinn.mon";
# MIMEヘッダの文字列をエンコード
$addr = mb_encode_mimeheader($name, "UTF-7", "Q") . " <" . $mbox . "@" . $doma . ">";
echo $addr; // =?UTF-7?Q?+AOYAlwClAOYAnACsAOMAgQCvAOMAgQCqAOMAgQCT-?=
# MIMEヘッダの文字列をデコード
$addr_turn=mb_decode_mimeheader($addr);
echo $addr_turn; // 日本はなこ
?>
mb_ereg
マルチバイト対応の正規表現マッチング
unknown
マルチバイト対応の正規表現マッチングを行い、マッチした場合は1を返します。 正規表現に一致しなかった場合、エラーが発生した場合はFALSEを返します。
オプションの第3引数regsを指定した場合は、マッチした部分のバイト数を返し、マッチした部分文字列が配列regsに格納されます。 空文字にマッチした場合は1が返されます。 マルチバイト文字は1文字2バイトでカウントされます。
<?
echo mb_ereg("ユーザー", "ユーザー123",$regs); // 15
print_r($regs); // Array ( [0] => ユーザー123 )
?>
mb_ereg_match
マルチバイト文字列が正規表現に一致するか調べる
unknown
指定したマルチバイト文字列が、パターンに指定した正規表現に一致するか調べます。 一致する場合にTRUE、そうでない場合にFALSEを返します。
<?
if(mb_ereg_match("ユーザー[0-3]{3}", "ユーザー123")){
echo "一致";
}else{
echo "不一致";
}
?>
mb_ereg_replace
マルチバイト文字列を正規表現で置換する
unknown
指定したマルチバイト文字列からパターンにマッチする文字列を探し、見つかった場合にその文字列を置換文字列で置換して返します。 エラーが発生した場合はFALSEを返します。
第1引数パターンには正規表現パターンを指定します。 マルチバイト文字列を指定することができます。
オプションの第4引数オプションには、マッチングの動作を指定します。 「i」を指定した場合は大文字小文字の区別をしません。 「x」を指定した場合は空白を無視します。 「m」を指定した場合は、マルチラインモードとなり、改行文字も「,」に含まれるようになります。 「p」を指定した場合は、POSIXモードとなり、改行も通常の文字とみなされるようになります。 「e」を指定した場合は、置換文字列がPHPの式として評価されます。
<?
#文字列の「.」「/」「,」「-」を全て、「/」に置換
$from = "[./,-]";
$to = "/";
$str = "あ/い,う-え,お";
echo mb_ereg_replace($from, $to, $str); // あ/い/う/え/お
?>
mb_eregi
マルチバイト対応の正規表現マッチング(大文字小文字の区別なし)
unknown
文字列に指定したマルチバイト文字列に対し、大文字小文字を区別しないで正規表現マッチングを行い、マッチした場合は1を返します。 正規表現に一致しなかった場合、エラーが発生した場合はFALSEを返します。
オプションの第3引数regsを指定した場合は、マッチした部分のバイト数を返し、マッチした部分文字列が配列regsに格納されます。 空文字にマッチした場合は1が返されます。 マルチバイト文字は1文字3バイトでカウントされます。
<?
echo mb_eregi("ユーザー", "ユーザー123",$regs); // 12
print_r($regs); // Array ( [0] => ユーザー123 )
?>
mb_eregi_replace
マルチバイト文字列を正規表現で置換する(大文字小文字の区別なし)
unknown
文字列に対し、正規表現パターンにマッチする文字列を置換文字列に置換して返します。 エラーが発生した場合はFALSEを返します。
第1引数正規表現パターンには、マルチバイト文字列を使用することができます。 大文字小文字は区別されません。
オプションの第4引数オプションで、マッチングの動作を変更することができます。 オプションの内容は、mb_ereg_replace()を参照してください。
<?
# 「ABC」および「あいうえお」を「●」に置換
$from = "[a-cあ-お]";
$to = "●";
$str = "あ-A-a";
echo mb_eregi_replace($from, $to, $str); // ●●●-●-●
?>
mb_get_info
mbstringの内部設定値を取得する
unknown
mbstringの内部設定パラメータを返します。
オプションの第1引数typeを省略、または「all」を指定すると、型情報を含む配列("internal_encoding", "http_output", "http_input", "func_overload", "mail_charset", "mail_header_encoding", "mail_body_encoding")の設定値を有する連想配列を返します。
typeに"http_output", "http_input", "internal_encoding", "func_overload"を指定した場合は、指定したタイプの値を返します。
<?
echo "<pre>".print_r(mb_get_info(), true)."</pre>";
/*
Array
(
[internal_encoding] => ISO-8859-1
[http_input] =>
[http_output] => pass
[func_overload] => 0
[func_overload_list] => no overload
[mail_charset] => UTF-8
[mail_header_encoding] => BASE64
[mail_body_encoding] => BASE64
[illegal_chars] => 0
[encoding_translation] => Off
[language] => neutral
[detect_order] => Array
(
[0] => ASCII
[1] => UTF-8
)
[substitute_character] => 63
[strict_detection] => Off
)
*/
?>
mb_http_input
HTTP入力文字エンコーディングを検出する
unknown
HTTP入力文字エンコーディングを検出し、typeの文字エンコーディングを返します。 この関数が指定したHTTP入力の処理を行っていない場合は、FALSEを返します。
オプションの第1引数typeには、HTTP入力の型を表す文字列を入力します。 GETの場合は「G」、POSTの場合は「P」、COOKIEの場合は「C」、文字列の場合は「S」、リストの場合は「L」、リスト全体(配列を返す)の場合は「I」を指定します。 省略した場合は、直近に処理されたHTTP入力の型を返します。
mb_http_output
HTTP出力文字エンコーディングを設定・取得する
unknown
HTTP出力文字エンコーディングを設定・取得します。
エンコーディングを指定すると、HTTP出力文字エンコーディングをエンコーディングで指定した文字エンコーディングに設定します。 この関数を実行した後の出力は、エンコーディングに変換されます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
エンコーディングを省略した場合は、現在のHTTP出力文字エンコーディングを返します。
<?
# 出力文字エンコーディングをUTF-8に設定
mb_http_output("UTF-8");
# 現在の出力文字エンコーディングを表示
echo mb_http_output(); // UTF-8
?>
mb_internal_encoding
内部文字エンコーディングを設定・取得する
unknown
内部文字エンコーディングを設定・取得します。
エンコーディングを指定すると、成功した場合にTRUE、失敗した場合にFALSEを返します。 エンコーディングを省略した場合は、現在の文字エンコーディングを返します。
オプションの第1引数エンコーディングは、HTTP入力文字エンコーディング変換、HTTP出力文字エンコーディング変換、mbstringモジュールの文字列関数においてデフォルトの文字エンコーディングとして使用されます。
<?
# 内部文字エンコーディングをUTF-8に設定
mb_internal_encoding("UTF-8");
# 現在の内部文字エンコーディングを表示
echo mb_internal_encoding(); // UTF-8
?>
mb_language
現在の言語を設定・取得する
unknown
現在の言語を設定・取得します。
オプションの第1引数languageが設定され、かつ有効な場合にTRUE、そうでない場合にFALSEを返します。 languageを省略した場合は、カレントの言語の名前が文字列として返されます。 事前に言語が設定されていない場合はFALSEを返します。
オプションの第1引数languageは、mb_send_mail()関数のエンコーディングとして使用されます。
指定可能な言語は、Japanese
、ja
、English
、en
、uni
(UTF-8)。
言語とその設定は、「Japanese」の場合はISO-2022-JP/Base64、「uni」の場合はUTF-8/Base64、「English」の場合は ISO-8859-1/quoted printableです。
<?
echo "カレントの言語は「".mb_language()."」です<br>\n";
//カレントの言語は「Japanese」です
?>
mb_list_encodings 
サポートするすべてのエンコーディングの配列を返す
unknown
サポートするすべてのエンコーディングの配列を数値添字の配列で返します。 この関数はエラーが発生しません。
<?
echo "<pre>".print_r(mb_list_encodings(), true)."</pre>";
/*
Array
(
[0] => pass
[1] => auto
[2] => wchar
[3] => byte2be
[4] => byte2le
[5] => byte4be
[6] => byte4le
[7] => BASE64
[8] => UUENCODE
[9] => HTML-ENTITIES
[10] => Quoted-Printable
[11] => 7bit
[12] => 8bit
[13] => UCS-4
[14] => UCS-4BE
[15] => UCS-4LE
[16] => UCS-2
[17] => UCS-2BE
[18] => UCS-2LE
[19] => UTF-32
[20] => UTF-32BE
[21] => UTF-32LE
[22] => UTF-16
[23] => UTF-16BE
[24] => UTF-16LE
[25] => UTF-8
[26] => UTF-7
[27] => UTF7-IMAP
[28] => ASCII
[29] => EUC-JP
[30] => SJIS
[31] => eucJP-win
[32] => SJIS-win
[33] => CP51932
[34] => JIS
[35] => ISO-2022-JP
[36] => ISO-2022-JP-MS
[37] => Windows-1252
[38] => ISO-8859-1
[39] => ISO-8859-2
[40] => ISO-8859-3
[41] => ISO-8859-4
[42] => ISO-8859-5
[43] => ISO-8859-6
[44] => ISO-8859-7
[45] => ISO-8859-8
[46] => ISO-8859-9
[47] => ISO-8859-10
[48] => ISO-8859-13
[49] => ISO-8859-14
[50] => ISO-8859-15
[51] => ISO-8859-16
[52] => EUC-CN
[53] => CP936
[54] => HZ
[55] => EUC-TW
[56] => BIG-5
[57] => EUC-KR
[58] => UHC
[59] => ISO-2022-KR
[60] => Windows-1251
[61] => CP866
[62] => KOI8-R
[63] => ArmSCII-8
)
*/
?>
mb_output_handler
出力バッファ内で文字エンコーディングを変換するコールバック関数
unknown
ob_start()のコールバック関数です。 この関数は、出力バッファの文字を内部文字エンコーディングからHTTP出力文字エンコーディングに変換し、変換後の文字列を返します。
第1引数コンテンツにはバッファの中身を指定します。
第2引数ステータスには出力バッファの状態を指定します。
<?
mb_http_output("UTF-8");
ob_start("mb_output_handler");
?>
mb_parse_str
GETデータをパースしてグローバル変数を設定する
unknown
GET、POST、COOKIEデータをパースし、グローバル変数を設定します。 成功した場合にTRUE、失敗した場合にFALSEを返します。 現状ではGETデータのみ使用することができます。
この関数は、URLエンコードされたデータをパースし、エンコーディングを検出して内部エンコーディングに変換し、参照渡しした配列resultまたはグローバル配列に設定します。
オプションの第2引数resultには、デコードされ、文字エンコーディング変換された文字列が含まれます。
<?
$encoded_string=urlencode("あいうえお");
mb_parse_str($encoded_string, $result);
$decode_str = array_shift(array_keys($result));
print_r($decode_str); // あいうえお
?>
mb_preferred_mime_name
MIME文字設定を文字列として取得する
unknown
指定したエンコーディングのMIME文字設定を文字列として返します。
<?
$outputenc = "sjis-win";
mb_http_output($outputenc);
ob_start("mb_output_handler");
mb_preferred_mime_name($outputenc); // Shift_JIS
header("Content-Type: text/html; charset=" . mb_preferred_mime_name($outputenc));
?>
mb_regex_encoding
現在のマルチバイト正規表現用のエンコーディングを文字列として返す
unknown
マルチバイト対応の正規表現関数で使用される文字エンコーディングを文字列として返します。
オプションの第1引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
<?
#現在のマルチバイト正規表現用の文字エンコーディングを取得
echo mb_regex_encoding(); //例 EUC-JP
#正規表現用の文字エンコーディングをSJISに変更
mb_regex_encoding("SJIS");
#文字エンコーディングSJISで、「,」「」「/」「-」のいずれかで文字列を分割
$str = "りんご,バナナ-ぶどう/おれんじ.メロン";
$array = mb_split("[,./-]", $str);
print_r($array);
//Array ( [0] => りんご [1] => バナナ [2] => ぶどう [3] => おれんじ [4] => メロン )
?>
mb_send_mail
エンコード変換を行ってメールを送信する
unknown
ヘッダと本文をmb_language()関数の設定に基づきエンコード変換してメールを送信します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数送信先には、メールアドレスを指定します(自動的にはエンコードされません)。 複数のメールアドレスに送信する場合は、メールアドレスをカンマ区切りで指定します。
第2引数件名には、メールのタイトルを指定します。 第3引数本文には、メールの内容を指定します。
オプションの第4引数追加ヘッダは、ヘッダの最後に挿入するヘッダを指定します。
複数のヘッダを指定する場合は、改行\n
区切りで指定します。
PHP4において、Content-TypeおよびContent-Transfer-Encodingヘッダの内容は、常にmb_language()関数で定義された値が用いられていましたが、PHP5.0.0以降、再定義可能になりました。
オプションの第5引数追加パラメータは、MTAへ渡すコマンドライン引数です。 sendmail利用時に正しいReturn-Pathを設定するのに有用です。
エンコードせずにメール送信する場合は、mail()関数を使用してください。
<?
//言語設定
mb_language("Japanese");
//内部エンコーディング
mb_internal_encoding("SJIS") ;
//(Fromに日本語を使用する場合はmb_encode_mimeheader()関数でエンコードする)
$name="日本はな子";
$from=mb_encode_mimeheader($name,"EUC","B")." <hanako_nihon@domain.com>";
//ヘッダ追加
$add_header ="From: ".$from."\n";
$add_header.="Reply-To: mymail@mydomain.com\n";
$add_header.="X-Mailer: PHP/".phpversion();
//送信先
$to="yourmail@yourdomain.com,hoge@hogedomain.com";
//件名
$subject="テストメールです";
//本文
$message="メッセージです\nメッセージです\nメッセージです";
//メール送信
mb_send_mail($to,$subject,$message,$add_header) or die("メール送信失敗!");
?>
mb_split
マルチバイト文字列を正規表現により分割する
unknown
パターン(大文字小文字を区別する正規表現)区切りで文字列を分割した配列を返します。 エラーが発生した場合に、FALSEを返します。
エンコーディングは、内部文字エンコーディングまたはmb_regex_encoding()関数で指定した文字エンコーディングが使用されます。
オプションの第3引数limitには最大要素数を指定します。 デフォルトは-1です。 が指定された場合、返される配列の要素数はlimit数となります。 limit < 文字列の分割数 の場合、最終の要素に文字列の残りの部分が全て格納されます。
patternがn回現われる場合、返される値には、n+1の要素が含まれます。 patternが現われない場合または文字列が空の場合は分割されず、1つの要素のみを有する配列が返されます。
<?
#「,」「」「/」「-」のいずれかで分割
$str = "りんご,バナナ-ぶどう/おれんじ.メロン";
$array = mb_split("[,./-]", $str);
print_r($array);
//Array ( [0] => りんご [1] => バナナ [2] => ぶどう [3] => おれんじ [4] => メロン )
?>
mb_split
マルチバイト文字列を正規表現により分割
unknown
パターン(大文字小文字を区別する正規表現)区切りで文字列を分割した配列を返します。 エラーが発生した場合に、FALSEを返します。
エンコーディングは、内部文字エンコーディングまたはmb_regex_encoding()関数で指定した文字エンコーディングが使用されます。
オプションの第3引数limitには最大要素数を指定します。 デフォルトは-1です。 が指定された場合、返される配列の要素数はlimit数となります。 limit < 文字列の分割数 の場合、最終の要素に文字列の残りの部分が全て格納されます。
patternがn回現われる場合、返される値には、n+1の要素が含まれます。 patternが現われない場合または文字列が空の場合は分割されず、1つの要素のみを有する配列が返されます。
<?
#「,」「」「/」「-」のいずれかで分割
$str = "りんご,バナナ-ぶどう/おれんじ.メロン";
$array = mb_split("[,./-]", $str);
print_r($array);
//Array ( [0] => りんご [1] => バナナ [2] => ぶどう [3] => おれんじ [4] => メロン )
?>
mb_strcut
文字列の一部を返す(指定バイト数分取出し)
unknown
取出開始位置およびバイト数で指定した範囲の文字列を返します。
第2引数取出開始位置がマルチバイト文字の2バイト目以降である場合、マルチバイト文字の最初のバイトから開始されます。
オプションの第3引数バイト数に負の値を指定した場合、このmb_strcut()関数とmb_substr()関数では、返り値が異なります。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
マルチバイト文字でない場合は、substr()関数を使用してください。
<?
#正の「取出開始位置」を指定した場合
echo mb_strcut('123456789', 1)."<br>"; // '123456789'を返す
echo mb_substr('123456789', 1, 3)."<br>"; // '1'を返す
echo mb_strcut('123456789', 1, 3)."<br>"; // '1'を返す
echo mb_strcut('123456789', 0, 4)."<br>"; // '12'を返す
echo mb_strcut('123456789', 0, 8)."<br>"; // '1234'を返す
echo "<hr>";
#負の「取出開始位置」を指定した場合
echo mb_strcut('123456789', -1)."<br>"; // '9' を返す
echo mb_strcut('123456789', -2)."<br>"; // '9' を返す
echo mb_strcut('123456789', -3, 1)."<br>"; // '' を返す
echo "<hr>";
#負の「バイト数」を指定した場合
echo mb_strcut('123456789', 0, -1)."<br>"; // '12345678'を返す
echo mb_strcut('123456789', 2, -1)."<br>"; // '2345678'を返す
echo mb_strcut('123456789', 4, -4)."<br>"; // '34567'を返す
echo mb_strcut('123456789', -3, -1)."<br>"; // '8'を返す
?>
mb_strimwidth
指定した幅で文字列を丸める
unknown
指定した文字列を開始位置からwidthで指定した幅に丸めて返します。 第2引数開始位置は文字列の先頭(0番目)からの文字数を指定します。
オプションの第4引数trimmarkerが指定された場合は、丸められた文字列の末尾に追加されます。
オプションの第5引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
<?
$str = "ブログの日記一覧などで日記本文の一部を表示する場合などに使えます。";
$str = mb_strimwidth($str, 1, 40, "..>");
echo $str; //ログの日記一覧などで日記本文の一部を..>
?>
mb_stripos 
文字列の中で指定した文字列が最初に現れる位置を返す(大文字小文字の区別なし)
unknown
文字列の中で、最初に検索文字列が現れる位置を数値で返します。 マルチバイト文字列に正しくマッチするようにstrpos()を拡張した関数で、最初の1文字目の位置が「0」、2文字目の位置が「1」というようになります。 見つからない場合はFALSEを返します。 大文字小文字は区別されます。
オプションの第3引数オフセット(PHP v5.2.0~)には、検索開始位置を指定します。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
マルチバイト文字でない場合は、strrpos()関数を使用してください。
<?
$str="あいうえお";
echo mb_stripos($str, 'い', 0, "UTF-8"); // 1
$str="あいうえお";
echo mb_stripos($str, 'あ', 0, "UTF-8"); // 0
$str="あいうえお";
echo mb_stripos($str, 'お', 0, "UTF-8"); // 4
?>
mb_stristr 
文字列の中で指定した文字列が最初に現れる位置を返す(大文字・小文字の区別なし)
unknown
文字列の中で最初に検索文字列が現れる場所を検索し、文字列の部分文字列を返します。 見つからなかった場合はFALSEを返します。 mb_strstr()と異なり、大文字小文字を区別しません。
オプションの第3引数partには、文字列のどの部分を返り値として返すのかを指定します。 TRUEを指定した場合は、文字列の先頭から検索文字列が最初に現れる位置までの文字列を返します。 FALSEを指定した場合は、検索文字列が最初に現れる位置から文字列の最後までの文字列を返します。 省略した場合は、デフォルトのFALSEが適用されます。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
<?
$str="あいうえお";
echo mb_stristr($str, "い", true, "UTF-8")."\n"; // あ
echo mb_stristr($str, "い", false, "UTF-8")."\n"; // いうえお
?>
mb_strlen
文字列の長さを取得する
unknown
エンコーディングの文字列の文字数を返します。 マルチバイト文字は1文字として数えられます。
オプションの第2引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
半角を1、全角を2として数える場合は、strlen()関数を使用してください。
<?
#半角も全角も1文字2カウント
$len = mb_strlen("あいうえおaiueo");
echo $len."<br>"; //10
?>
mb_strpos
文字列の中で指定した文字列が最初に現われる位置を返す
unknown
文字列の中で、最初に検索文字列が現れる位置を数値で返します。 マルチバイト文字列に正しくマッチするようにstrpos()を拡張した関数で、最初の1文字目の位置が「0」、2文字目の位置が「1」というようになります。 見つからない場合はFALSEを返します。 大文字小文字は区別されます。
mb_strrpos()関数と異なり、この関数は引数部分文字列の文字列全体が検索対象となります。
オプションの第3引数オフセットには、検索開始位置を指定します。 省略した場合は、先頭(0番目)が適用されます。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
マルチバイト文字でない場合は、strpos()を使用してください。
<?
$str = "あいうえおあいうえお";
echo mb_strpos($str, 'あ'); //0 ('a'は先頭0番目に見つかる)
echo mb_strpos($str, 'あ', 5); //6 (先頭0から数えて5文字目以降で、 最初に見つかった'a'の位置を返す)
if(mb_strpos($str, 'あ') === false) echo "見つかりません";
else echo "見つかりました";
//見つかりました
if(!is_numeric(mb_strpos($str, 'あ'))) echo "見つかりません";
else echo "見つかりました";
//見つかりました
?>
mb_strripos 
文字列の中で指定した文字列が最後に現れる位置を返す(大文字小文字の区別なし)
unknown
文字列の中で、最後に検索文字列が現れる位置を数値で返します。 マルチバイト文字列に正しくマッチするようにstrripos()を拡張した関数で、最初の1文字目の位置が「0」、2文字目の位置が「1」というようになります。 見つからない場合はFALSEを返します。 大文字小文字は区別されません。
オプションの第3引数オフセットには、検索開始位置を指定します。 負の値を指定すると、文字列の末尾より前の任意の位置で検索を終了します。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
マルチバイト文字でない場合は、strrpos()関数を使用してください。
<?
$str="あいうえお";
echo mb_strripos($str, 'い', 0, "UTF-8"); // 1
$str="あいうえお";
echo mb_strripos($str, 'あ', 0, "UTF-8"); // 0
$str="あいうえお";
echo mb_strripos($str, 'お', 0, "UTF-8"); // 4
?>
mb_strrpos
文字列の中で指定した文字列が最後に現われる位置を返す
unknown
文字列の中で、最後に検索文字列が現れる位置を数値で返します。 マルチバイト文字列に正しくマッチするようにstrpos()を拡張した関数で、最初の1文字目の位置が「0」、2文字目の位置が「1」というようになります。 見つからない場合はFALSEを返します。 大文字小文字は区別されます。
オプションの第3引数オフセット(PHP v5.2.0~)には、検索開始位置を指定します。 負の値を指定すると、文字列の末尾より前の任意の位置で検索を終了します。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
マルチバイト文字でない場合は、strrpos()関数を使用してください。
<?
$str = "あいうえお";
echo mb_strrpos($str, 'い', 0, "UTF-8"); // 1
if(mb_strrpos($str, 'い',0, "UTF-8")===false) echo "見つかりません";
else echo "見つかりました";
//見つかりました
if(!is_numeric(mb_strrpos($str, 'い', 0, "UTF-8"))) echo "見つかりません";
else echo "見つかりました";
//見つかりました
?>
mb_strstr 
文字列の中で指定した文字列が最初に現れる位置を返す
unknown
文字列の中で最初に検索文字列が現れる場所を検索し、文字列の部分文字列を返します。 見つからなかった場合はFALSEを返します。
オプションの第3引数partには、文字列のどの部分を返り値として返すのかを指定します。 TRUEを指定した場合は、文字列の先頭から検索文字列が最初に現れる位置までの文字列を返します。 FALSEを指定した場合は、検索文字列が最初に現れる位置から文字列の最後までの文字列を返します。 省略した場合は、デフォルトのFALSEが適用されます。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
<?
$str="あいうえお";
echo mb_strstr($str, "い", true, "UTF-8")."\n"; // あ
echo mb_strstr($str, "い", false, "UTF-8")."\n"; // いうえお
?>
mb_strtolower
文字列を小文字にする
unknown
文字列のすべてのアルファベットを小文字にして返します。
オプションの第2引数エンコーディングには、文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
<?
$str="MARY HAD A LITTLE LAMB AND SHE LOVED IT SO";
$str=mb_strtolower($str);
echo $str; // mary had a little lamb and she loved it so
?>
mb_strtoupper
文字列を大文字にする
unknown
文字列のすべてのアルファベットを大文字にして返します。
オプションの第2引数エンコーディングには、文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
<?
$str="Mary Had A Little Lamb and She LOVED It So";
$str=mb_strtoupper($str);
echo $str; // MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
?>
mb_strwidth
文字列の幅を返す
unknown
文字列の幅を返します。 マルチバイト文字の場合は、通常、シングルバイト文字の倍の幅となります。
オプションの第2引数エンコーディングには、文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
文字 | 幅 |
---|---|
U+0000 - U+0019 | 0 |
U+0020 - U+1FFF | 1 |
U+2000 - U+FF60 | 2 |
U+FF61 - U+FF9F | 1 |
U+FFA0 - | 2 |
<?
echo mb_strwidth("aiueo","UTF-8"); // 5
echo mb_strwidth("あいうえお","UTF-8"); //10
?>
mb_substitute_character
置換文字を設定・取得する
unknown
入力文字エンコーディングが無効、または出力エンコーディングに文字コードが存在しない場合に適用する代替文字を指定します。 無効な文字は、NULL(出力しない)、文字列、整数値(Unicode文字コード値)に置換することができます。
この設定は、mb_convert_encoding()、mb_convert_variables()、mb_output_handler()、mb_send_mail()に影響します。
オプションの第1引数substrcharには、整数値(Unicode文字コード値)または文字列を下記のように指定します。
- "none": 出力しない
- "long": 文字コードの値 (例: U+3000,JIS+7E7E) を出力する
substrcharを指定した場合は、成功時にTRUE、そうでない場合にFALSEを返します。 省略した場合は、Unicode値、"none"、"long"のいずれかを返します。
<?
# Unicode U+3013(ゲタ記号)を設定
mb_substitute_character(0x3013);
# HEX フォーマットを設定
mb_substitute_character("long");
# 現在の設定を表示
echo mb_substitute_character(); // long
?>
mb_substr
文字列の一部を返す(指定文字数分取出し)
unknown
取出開始位置および文字数で指定した範囲の文字列を返します。 取出開始位置は文字列の先頭(0番目)からの相対位置を指定します。
オプションの第4引数エンコーディングには、使用する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが適用されます。
マルチバイト文字でない場合は、substr()関数を使用してください。
<?
#正の「取出開始位置」を指定した場合
echo mb_substr('123456789', 1)."<br>"; // '23456789'を返す
echo mb_substr('123456789', 1, 3)."<br>"; // '234'を返す
echo mb_substr('123456789', 1, 3)."<br>"; // '234'を返す
echo mb_substr('123456789', 0, 4)."<br>"; // '1234'を返す
echo mb_substr('123456789', 0, 8)."<br>"; // '12345678'を返す
echo "<hr>";
#負の「取出開始位置」を指定した場合
echo mb_substr('123456789', -1)."<br>"; // '9' を返す
echo mb_substr('123456789', -2)."<br>"; // '89' を返す
echo mb_substr('123456789', -3, 1)."<br>"; // '7' を返す
echo "<hr>";
#負の「バイト数」を指定した場合
echo mb_substr('123456789', 0, -1)."<br>"; // '12345678'を返す
echo mb_substr('123456789', 2, -1)."<br>"; // '345678'を返す
echo mb_substr('123456789', 4, -4)."<br>"; // '5'を返す
echo mb_substr('123456789', -3, -1)."<br>"; // '78'を返す
?>
mb_substr_count
部分文字列の出現回数を数える
unknown
指定した文字列中に、部分文字列が現われる回数を返します。 1回も現われない場合に0を返します。
オプションの第3引数文字エンコーディングは、文字列や部分文字列に対する文字エンコーディングを指定します。 省略した場合は、内部文字エンコーディングが使用されます。
<?
#文字列の中に'テスト'が何回出現するか返す
$cnt = mb_substr_count("これはテストです。もう一度言いますが、これはテストです。", "テスト");
echo "'テスト'の出現回数は、" . $cnt . "回です。"; //'テスト'の出現回数は、2回です。
?><?
#文字列の「.」「/」「,」「-」を全て、「/」に置換
$from = "[./,-]";
$to = "/";
$str = "あ/い,う-え,お";
echo mb_ereg_replace($from, $to, $str); // あ/い/う/え/お
?>