iconv 関数
導入
このモジュールには、iconv による文字集合の変換機能へのインターフェースが含まれています。 このモジュールにより、ローカルな文字集合で表された文字列を、Unicode 文字集合のような 他の文字集合で表わされた文字列に変換することができます。 サポートされる文字集合は、使用するシステムの iconv の実装に依存します。 いくつかのシステムでは iconv 関数は意図した通りに動作しない可能性があることに注意してください。 この場合は、» GNU libiconv ライブラリをインストール すると良いでしょう。 このライブラリの出力は、多くの場合、より妥当なものとなります。PHP 5.0.0以降、この拡張モジュールには、 多言語スクリプトを書く際に有用な種々のユーティリティが附属しています。 この新機能については、以下のセクションを参照してください。
要件
使用しているシステムが、最近のPOSIX対応システムのどれかである場合には、標準C 言語ライブラリの中にiconv機能が含まれているため、何かをする必要はありません。 そうでない場合は、 » libiconvライブラリを入手して使用する システムにインストールする必要があります。インストール手順
この関数を使用するには、 PHPバイナリを以下のオプションを指定して 構築する必要があります。 --with-iconv[=DIR]Windows® ユーザへの注意: Windows®環境でこのモジュールを有効にするには、 PHP/Win32バイナリパッケージに附属するiconv.dllまたは iconv-1.3.dll (4.2.1より前)という名前の DLLファイルを環境変数PATHで指定した ディレクトリまたは Windows® のシステムディレクトリにコピーする 必要があります。
このモジュールは、PHP 5 で PHP の一部として組み込まれました。 iconv.dll や php_iconv.dll は もはや必要ありません。
実行時設定
php.ini の設定により動作が変化します。表 122. Iconv 設定オプション
名前 | デフォルト | 変更の可否 | 変更履歴 |
---|---|---|---|
iconv.input_encoding | "ISO-8859-1" | PHP_INI_ALL | PHP 4.0.5 以降で使用可能です。 |
iconv.output_encoding | "ISO-8859-1" | PHP_INI_ALL | PHP 4.0.5 以降で使用可能です。 |
iconv.internal_encoding | "ISO-8859-1" | PHP_INI_ALL | PHP 4.0.5 以降で使用可能です。 |
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
警告 |
(IBM AIX のように)いくつかのシステムでは "ISO-8859-1" ではなく
"ISO8859-1" を使用することがあります。そのような場合は、設定オプションや
関数のパラメータにはこの値を使用しなければなりません。
|
注意: 設定オプション iconv.input_encoding は、 今のところ一切利用されていません。
リソース型
リソース型は定義されていません。定義済み定数
PHP 4.3.0以降、この拡張モジュールで使用される iconv 実装の種類を実行時に調べることができます。 表 123. iconv定数名前 | 型 | 説明 |
---|---|---|
ICONV_IMPL | string | 実装の名前 |
ICONV_VERSION | string | 実装のバージョン |
注意: これらの定数を用いて実装に依存するスクリプトを書くことは全く推奨されません。
PHP 5.0.0以降、以下の定数も利用可能です。 表 124. PHP 5.0.0以降で利用可能なiconv定数
名前 | 型 | 説明 |
---|---|---|
ICONV_MIME_DECODE_STRICT | integer | iconv_mime_decode()で使用されるビットマスク |
ICONV_MIME_DECODE_CONTINUE_ON_ERROR | integer | iconv_mime_decode()で使用されるビットマスク |
参考
GNU Recode 関数も参照してください。目次
- 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
iconv — 文字列を指定した文字エンコーディングに変換する
説明
string iconv ( string in_charset, string out_charset, string str )文字列 str の文字セットを in_charset から out_charset に変換します。
パラメータ
- in_charset
-
入力文字セット。
- out_charset
-
出力文字セット。
文字列 //TRANSLIT を out_charset に追加すると、翻字機能が有効になります。これは、指定された文字集合で 表せない文字を、見た目の似ている別の文字に置き換える機能です。 文字列 //IGNORE を追加すると、指定された文字集合で 表せない文字は黙って切り捨てられます。 それ以外の場合は、str の中に変換できない文字が 出現した時点で変換が打ち切られます。 - str
-
変換する文字列。
返り値
変換された文字列、あるいは失敗した場合に FALSE を返します。例
例 889. iconv() の例
<?php
echo iconv("ISO-8859-1", "UTF-8", "This is a test.");
?>
iconv
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/30 06:02 UTC 版)
ナビゲーションに移動 検索に移動iconv(アイコンブ)は異なる文字コード間の相互変換を行う標準API。または、そのAPIに付属する文字コード変換ユーティリティプログラム。名前は「International Codeset Conversion Library」に由来する[1]。GNUによる実装[2]が有名で、変換ライブラリ libiconv のライセンスはLGPL、変換プログラム iconv のライセンスはGPLである。
iconv API
iconvのAPIは、おもにUNIX環境で文字列の文字コード変換を行う標準インタフェースである。iconvは最初HP-UXで開発され、後にPOSIX規格として標準化された。そのため、ほとんどのUnix系のシステムで使用できる。
iconv APIは文字コード変換プログラムのほか、既存のプログラムを国際化または多言語化するためにも用いられる。例えば、Sambaの国際化にはiconvが利用されている。
互換性
XML処理用ライブラリであるlibxmlがiconvを必要としているため、libxmlを使用したアプリケーションソフトウェアを利用する場合にもiconvを必要とする。
Microsoft Windows上では、CygwinやGnuWin32等のUnixライクな環境をインストールすることで、iconv APIやiconvプログラムを利用できるようになる。
プログラミング言語の標準ライブラリにAPIが組み込まれている場合がある。
- PHP
- PHPスクリプトからiconvの機能を利用することができる(WindowsのPHPでも付属のDLL (iconv.dll)により利用可能)。
- バージョン1.9以前のRuby
- それ以降のバージョンではそのプラットフォーム依存性から非推奨扱いになっており、String#encodeを代替とする。
日本語の対応状況
GNU Cライブラリのiconvでは2019年5月現在のところ、EUC-JP、EUC-JIS X0213、Shift_JIS、Shift_JIS X0213、CP932、ISO-2022-JP、ISO-2022-JP-2、ISO-2022-JP-1、ISO-2022-JP-MS、ISO-2022-JP-3等の日本語の文字コードに対応している[2]。また、UnicodeのエンコーディングであるUTF-8、UTF-16、UTF-32、UTF-7にも対応している[2]。
古くから使用されているnkfと異なり、多くの環境で標準的に使用できるが、一部の文字でnkfと変換結果が異なる点で注意を要する。 また、nkfに存在するエンコードの自動検出機能は存在しない。
使用例
特に意識していなくても、多くの非英語環境向けのUNIXプログラムの内部で間接的に使用されているが、もちろんユーザが明示的に使用することもできる。
ここでは、Shift_JISのテキストファイルsjis.txtを、UTF-8に変換し、utf8.txtとして保存する場合のコマンドの例を示す。
シェルからiconvコマンドで変換する場合
次のコマンドを実行することで変換できる。
iconv -f Shift_JIS -t UTF-8 sjis.txt > utf8.txt
自作プログラムからiconvライブラリを使用し変換する場合
次のC言語ソースをコンパイルし、実行することで変換できる。
ただし、簡単のためエラー処理は省略しているので、このまま実用プログラムに使用しないこと。
#include <stdio.h>
#include <iconv.h>
#define S_SIZE (1024)
int main(void) {
iconv_t icd;
FILE *fp_src, *fp_dst;
char s_src[S_SIZE], s_dst[S_SIZE];
char *p_src, *p_dst;
size_t n_src, n_dst;
icd = iconv_open("UTF-8", "Shift_JIS");
fp_src = fopen("sjis.txt", "r");
fp_dst = fopen("utf8.txt", "w");
while (1) {
fgets(s_src, S_SIZE, fp_src);
if (feof(fp_src))
break;
p_src = s_src;
p_dst = s_dst;
n_src = strlen(s_src);
n_dst = S_SIZE-1;
while (0 < n_src) {
iconv(icd, &p_src, &n_src, &p_dst, &n_dst);
}
*p_dst = '\0';
fputs(s_dst, fp_dst);
}
fclose(fp_dst);
fclose(fp_src);
iconv_close(icd);
return 0;
}
脚注
外部リンク
- コマンド
- ライブラリ・ルーチン
- オンライン版のiconvコマンド(英語)
- GNUのCライブラリiconv(英語)
固有名詞の分類
- Iconvのページへのリンク