自然言語および文字エンコーディングiconv 関数
- iconv_get_encoding〔iconv 拡張モジュールの内部設定変数を取得する〕
- iconv_mime_decode_headers〔複数の MIME ヘッダフィールドを一括デコードする〕
- iconv_mime_decode〔MIME ヘッダフィールドをデコードする〕
- iconv_mime_encode〔MIME ヘッダフィールドを作成する〕
- iconv_set_encoding〔文字エンコーディング変換用の設定を行なう〕
- iconv_strlen〔文字列の文字数を返す〕
- iconv_strpos〔文字列が最初に現れる場所を見つける〕
- iconv_strrpos〔文字列が最後に現れる場所を見つける〕
- iconv_substr〔文字列の一部を切り出す〕
- iconv〔文字列を指定した文字エンコーディングに変換する〕
- ob_iconv_handler〔出力バッファハンドラとして文字エンコーディングを変換する〕
iconv_get_encoding
iconv 拡張モジュールの内部設定変数を取得する
unknown
iconv拡張モジュールの内部設定変数を取得します。 成功した場合は、内部設定変数の現在の設定、失敗した場合はFALSEを返します。 タイプを省略あるいは「all」を指定した場合は、内部設定変数の現在の設定すべてを格納した配列を返します。
オプションの第1引数タイプには、下記のいずれかの値を指定することがすることができます。 デフォルトは「all」です。
- all
- input_encoding
- output_encoding
- internal_encoding
<?
# iconv 拡張モジュールの内部設定変数を設定する
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("input_encoding", "ISO-8859-1");
iconv_set_encoding("output_encoding", "ISO-8859-1");
# iconv 拡張モジュールの内部設定変数を取得する
print_r(iconv_get_encoding('all'));
/*
Array
(
[input_encoding] => ISO-8859-1
[output_encoding] => ISO-8859-1
[internal_encoding] => UTF-8
)
*/
?>
iconv_mime_decode_headers
複数の MIME ヘッダフィールドを一括デコードする
unknown
複数のMIMEヘッダフィールドを一度にデコードし、連想配列を返します。 返り値の連想配列には、encoded_headersで指定したMIMEヘッダフィールドがすべて含まれています。 デコード中にエラーが発生した場合はFALSEを返します。
連想配列の個々のキーがフィールド名を現し、その要素がフィールドの値を表します。 同名のフィールドが複数存在する場合は、自動的に連番付きの配列が生成され、出現順にその配列に入れられます。
第1引数encoded_headersには、エンコードされたヘッダを表す文字列を指定します。
オプションの第2引数モードには、この関数が不正な形式のMIMEタイプフィールドに遭遇した時の振る舞いを定義します。 下記のビットマスクの組み合わせを指定することができます。
値 | 定数名 | 説明 |
---|---|---|
1 | ICONV_MIME_DECODE_STRICT1 | 指定すると、ヘッダはRFC2047で定義されている標準に完全準拠する形式でデコードされます。世の中には おかしなメールソフトが多く存在し、それらは規格に従わずに間違ったMIMヘッダを生成するため、このオプションはデフォルトでは無効になっています。 |
21 | ICONV_MIME_DECODE_CONTINUE_ON_ERROR1 | 指定すると、この関数は文法的なエラーを無視し、デコード作業を継続します。 |
オプションの第3引数文字セットには、結果の文字セットを取得します。 省略した場合は、iconv.internal_encoding(デフォルトは"ISO-8859-1")が適用されます。
1つのMIMEヘッダフィールドを一括してデコードする場合は、iconv_mime_decode()を使用してください。
<?
# 複数の MIME ヘッダフィールドを一括デコードする
$headers_string=<<<EOF
Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
To: example@example.com
Date: Thu, 1 Jan 1970 00:00:00 +0000
Message-Id: <example@example.com>
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id example for <example@example.com>;
Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
(envelope-from example-return-0000-example=example.com@example.com)
Received: (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000
EOF;
$headers= iconv_mime_decode_headers($headers_string, 0, "UTF-8");
print_r($headers);
/*
Array
(
[Subject] => Prufung Prufung
[To] => example@example.com
[Date] => Thu, 1 Jan 1970 00:00:00 +0000
[Message-Id] => <example@example.com>
[Received] => Array
(
[0] => from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example@example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com@example.com)
[1] => (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000
)
)
*/
?>
iconv_mime_decode
MIME ヘッダフィールドをデコードする
unknown
MIMEヘッダフィールドをデコードして返します。 デコード中にエラーが発生した場合はFALSEを返します。
第1引数encoded_headersには、エンコードされたヘッダを表す文字列を指定します。
オプションの第2引数モードには、この関数が不正な形式のMIMEタイプフィールドに遭遇した時の振る舞いを定義します。 下記のビットマスクの組み合わせを指定することができます。
値 | 定数名 | 説明 |
---|---|---|
1 | ICONV_MIME_DECODE_STRICT | 指定すると、ヘッダはRFC2047で定義されている標準に完全準拠する形式でデコードされます。世の中には おかしなメールソフトが多く存在し、それらは規格に従わずに間違ったMIMヘッダを生成するため、このオプションはデフォルトでは無効になっています。 |
21 | ICONV_MIME_DECODE_CONTINUE_ON_ERROR | 指定すると、この関数は文法的なエラーを無視し、デコード作業を継続します。 |
オプションの第3引数文字セットには、結果の文字セットを取得します。 省略した場合は、iconv.internal_encoding(デフォルトは"ISO-8859-1")が適用されます。
複数のMIMEヘッダフィールドを一括してデコードする場合は、iconv_mime_decode_headers()を使用してください。
<?
# MIME ヘッダフィールドをデコードする
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=", 0, "UTF-8");
// Subject: Prufung Prufung
?>
iconv_mime_encode
MIME ヘッダフィールドを作成する
unknown
指定したフィールド名とフィールドの値から、有効なMIMEヘッダフィールドを作成して返します。 返り値は下記のような形式になります。 「Subject」がフィールド名、「=?ISO-8859-1?...」で始まる部分がフィールドの値となります。
Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
成功した場合はエンコードしたMIMEフィールド、エンコード時にエラーが発生した場合はFALSEを返します。
オプションの第3引数preferencesは、この関数の振る舞いを変更する場合に、設定項目を含む連想配列を指定するのに使用します。 この関数でサポートされている項目は下記の通りです。 項目名の大文字小文字は区別されます。
項目 | 型 | 説明 | 例 |
---|---|---|---|
scheme | string | フィールドの値のエンコード方法を指定します。「B」(base64エンコード)、「Q」(quoted-printableエンコード)のいずれかを指定します。デフォルトは「B」です。 | B |
input-charset | string | 第1引数フィールド名と第2引数フィールドの値の文字セットを指定します。省略すると、ini設定のiconv.internal_encodingが適用されます。デフォルトは、iconv.internal_encodingです。 | ISO-8859-1 |
output-charset | string | MIMEヘッダを作成する文字セットを指定します。 省略すると、input-charsetと同じ値が適用されます。デフォルトは、iconv.internal_encodingです。 | UTF-8 |
line-length | integer | ヘッダ行の長さの最大値を指定します。もし結果がこの値より 長くなった場合は、RFC2822 - Internet Message Formatに基づいてヘッダを折りたたんで複数行に分割します。省略すると、長さは76文字に制限されます。デフォルトは76文字です。 | 996 |
line-break-chars | string | 長いヘッダフィールドに対して折りたたみ処理が行われる場合、個々の行の後ろに付加する文字列を指定します。省略すると、「\r\n」(CRLF)が適用されます。 この引数は、input-charsetの値にかかわらず常にASCII文字列として扱われます。デフォルトは「\r\n」です。 | \n |
<?
$preferences=array(
"input-charset" => "ISO-8859-1",
"output-charset" => "UTF-8",
"line-length" => 76,
"line-break-chars" => "\n"
);
# base64 エンコード
$preferences["scheme"]="Q";
echo iconv_mime_encode("Subject", "Prufung Prufung", $preferences);
// Subject: =?UTF-8?Q?Pr=C3=83=C2=BCfung=20Pr=C3=83=C2=BCfung?=
# quoted-printableエンコード
$preferences["scheme"]="B";
echo iconv_mime_encode("Subject", "Prufung Prufung", $preferences);
// Subject: =?UTF-8?B?UHLDg8K8ZnVuZyBQcsODwrxmdW5n?=
?>
iconv_set_encoding
文字エンコーディング変換用の設定を行なう
unknown
タイプで指定された内部設定変数の値を、文字セットに変換します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数タイプには、下記のいずれかの値を指定します。
- input_encoding
- output_encoding
- internal_encoding
now coding...
module/include/php/iconv/iconv_set_encoding.inc
iconv_strlen
文字列の文字数を返す
unknown
strlen()とは異なり、指定した文字列中の文字数を、指定した文字セットに基づいて数えます。 結果は、必ずしも文字列のバイト数と一致するとは限りません。
オプションの第2引数文字セットを省略した場合、文字列のエンコードにはiconv.internal_encoding(デフォルトは「ISO-8859-1」)が適用されます。
<?
$str = "あいうえお";
echo "mb_strlen: ".mb_strlen($str,'UTF-8')."\n";
echo "strlen/utf8_decode: ".strlen(utf8_decode($str))."\n";
echo "iconv_strlen: ".iconv_strlen($str,'UTF-8')."\n";
/*
mb_strlen: 5
strlen/utf8_decode: 5
iconv_strlen: 5
*/
?>
iconv_strpos
文字列が最初に現れる場所を見つける
unknown
文字列の中で検索文字列が最初に現れた位置を数字で返します。 見つからない場合はFALSEを返します。
オプションの第3引数オフセットには、検索開始位置を指定します。 デフォルトは0(先頭から)です。
オプションの第4引数文字セットを省略した場合、文字列のエンコードにはiconv.internal_encoding(デフォルトは「ISO-8859-1」)が適用されます。
strpos()の返り値は検索文字列が見つかった位置の先頭からバイト数になりますが、この関数の返り値はそれとは異なり、検索文字列が見つかった位置の先頭からの文字数となります。 文字数は文字セットに基づいて数えられます。
<?
$str = "abcABCabc";
###### strpos
echo strpos($str, 'a'); //0 ('a'は先頭0番目に見つかる)
echo strpos($str, 'a', 5); //6 (先頭0から数えて5文字目以降で、 最初に見つかった'a'の位置を返す)
echo (strpos($str, 'a')===false) ? "見つかりません" : "見つかりました"; // 見つかりました
echo (!is_numeric(strpos($str, 'a'))) ?"見つかりません" : "見つかりました"; // 見つかりました
###### iconv_strpos
echo iconv_strpos($str, 'a'); //0 ('a'は先頭0番目に見つかる)
echo iconv_strpos($str, 'a', 5); //6 (先頭0から数えて5文字目以降で、 最初に見つかった'a'の位置を返す)
echo (iconv_strpos($str, 'a')===false) ? "見つかりません" : "見つかりました"; // 見つかりました
echo (!is_numeric(iconv_strpos($str, 'a'))) ?"見つかりません" : "見つかりました"; // 見つかりました
?>
iconv_strrpos
文字列が最後に現れる場所を見つける
unknown
文字列の中で検索文字列が最後に現れた位置を数字で返します。 文字数は文字セットに基づいて数えられます。
オプションの第3引数オフセットには、検索開始位置を指定します。 デフォルトは0(先頭から)です。
オプションの第4引数文字セットを省略した場合、文字列のエンコードにはiconv.internal_encoding(デフォルトは「ISO-8859-1」)が適用されます。
strrpos()の返り値は検索文字列が見つかった位置の先頭からバイト数になりますが、この関数の返り値はそれとは異なり、検索文字列が見つかった位置の先頭からの文字数となります。
<?
$str = "abcABCabc";
###### strrpos
echo strrpos($str, 'a'); //6
echo (strrpos($str, 'a')===false) ? "見つかりません" : "見つかりました"; // 見つかりました
echo (!is_numeric(strrpos($str, 'a'))) ? "見つかりません" : "見つかりました"; // 見つかりました
###### iconv_strrpos
echo iconv_strrpos($str, 'a'); //6
echo (iconv_strrpos($str, 'a')===false) ? "見つかりません" : "見つかりました"; // 見つかりました
echo (!is_numeric(iconv_strrpos($str, 'a'))) ? "見つかりません" : "見つかりました"; // 見つかりました
?>
iconv_substr
文字列の一部を切り出す
unknown
文字列のオフセットと長さで指定された部分文字列を返します。 文字列が長さより長い場合はFALSEを返します。
第2引数オフセットが正の値の場合、文字列のオフセット晩目の文字(0始まり)から切り出しを開始します。 第2引数オフセットが負のの値の場合、文字列の最後から数えてオフセット晩目の文字から切り出しを開始します。
オプションの第3引数長さが正の値の場合、返される文字列はオフセット番目から数えて最大長さ文字数分となります(文字列の長さに依存)。 オプションの第3引数長さが負の値の場合、文字列のオフセット晩目の文字から始まり、文字列の最後から数えて長さ文字列分戻ったところまでとなります。
オプションの第4引数文字セットを省略すると、ini設置のiconv.internal_encoding(デフォルトは「ISO-8859-1」)が適用されます。
<?
$str = "abcdef";
###### substr
echo substr($str, -1)."\n"; // "f" を返す
echo substr($str, -2)."\n"; // "ef" を返す
echo substr($str, -3, 1)."\n"; // "d" を返す
###### iconv_substr
echo iconv_substr($str, -1)."\n"; // "f" を返す
echo iconv_substr($str, -2)."\n"; // "ef" を返す
echo iconv_substr($str, -3, 1)."\n"; // "d" を返す
?>
iconv
文字列を指定した文字エンコーディングに変換する
unknown
文字列の文字セットを入力文字セットから出力文字セットに変換して返します。 失敗した場合はFALSEを返します。
<?
###### 文字列を指定した文字エンコーディングに変換する
$text = "This is the Euro symbol '€'.";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
/*
Original : This is the Euro symbol '€'.
TRANSLIT : This is the Euro symbol 'EUR'.
IGNORE : This is the Euro symbol ''.
Plain : This is the Euro symbol '
*/
?>
ob_iconv_handler
出力バッファハンドラとして文字エンコーディングを変換する
unknown
internal_encodingでエンコードされた文字列をoutput_encodingに変換します。 internal_encodingとoutput_encodingは、iconv_set_encoding()または設定ファイル(php.ini)で定義されている必要があります。 成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");
ob_start("ob_iconv_handler"); // 出力バッファリングを開始
?>