array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ja', ), 'this' => array ( 0 => 'function.utf8-encode.php', 1 => 'utf8_encode', ), 'up' => array ( 0 => 'ref.strings.php', 1 => 'String 関数', ), 'prev' => array ( 0 => 'function.utf8-decode.php', 1 => 'utf8_decode', ), 'next' => array ( 0 => 'function.vfprintf.php', 1 => 'vfprintf', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ja', 'path' => 'reference/strings/functions/utf8-encode.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_encode — ISO-8859-1 文字列を UTF-8 に変換する
この関数は PHP 8.2.0 で 非推奨になります。この関数に頼らないことを強く推奨します。
この関数は、文字列 string
を ISO-8859-1
エンコードから UTF-8
へ変換します。
注意:
この関数は、指定された文字列の現在の文字エンコーディングを推測しません。 代わりに、 ISO-8859-1 ("Latin 1" とも呼ばれています) としてエンコードされていると解釈し、UTF-8 に変換します。 全てのバイト列は有効な ISO-8859-1 の文字列であるため、 この関数は決してエラーになりません。 しかし、異なるエンコーディングを意図していた場合、 有用な結果にはならないでしょう。
ISO-8859-1
文字エンコーディングを使っているとマークされている 多くの Web ページが、実際にはそれと似たWindows-1252
を使っており、 Web ブラウザはISO-8859-1
Web ページをWindows-1252
として解釈しています。Windows-1252
はISO-8859-1
のある制御文字の代わりに、ユーロ記号 (€
) や curly quote (“
”
) を印字可能な文字として追加しています。 この関数はそうしたWindows-1252
文字を正しく変換しません。Windows-1252
の変換が必要な場合は、別の関数を使ってください。
string
ISO-8859-1 形式の文字列。
string
を UTF-8 に変換した結果を返します。
バージョン | 説明 |
---|---|
8.2.0 | この関数は、推奨されなくなりました。 |
7.2.0 | この関数は、XML拡張モジュール から PHP のコアに移動しました。 これより前のバージョンでは、 この関数は XML拡張モジュール をインストールしていた場合にのみ利用可能でした。 |
例1 基本的な例
<?php
// Convert the string 'Zoë' from ISO 8859-1 to UTF-8
$iso8859_1_string = "\x5A\x6F\xEB";
$utf8_string = utf8_encode($iso8859_1_string);
echo bin2hex($utf8_string), "\n";
?>
上の例の出力は以下となります。
5a6fc3ab
注意: この関数は推奨されません。代替については下記のとおりです。
この関数は、PHP 8.2.0 以降は 推奨されなくなり、 将来のバージョンで削除される予定です。 この関数を使っているコードをチェックし、適切な代替に置き換えるべきです。
この関数と似た機能は、 mb_convert_encoding() で実現できます。 この関数は、ISO-8859-1 と、多くの他の文字エンコーディングをサポートしています。
<?php
$iso8859_1_string = "\xEB"; // 'ë' (e with diaeresis) in ISO-8859-1
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$iso8859_7_string = "\xEB"; // the same string in ISO-8859-7 represents 'λ' (Greek lower-case lambda)
$utf8_string = mb_convert_encoding($iso8859_7_string, 'UTF-8', 'ISO-8859-7');
echo bin2hex($utf8_string), "\n";
$windows_1252_string = "\x80"; // '€' (Euro sign) in Windows-1252, but not in ISO-8859-1
$utf8_string = mb_convert_encoding($windows_1252_string, 'UTF-8', 'Windows-1252');
echo bin2hex($utf8_string), "\n";
?>上の例の出力は以下となります。
c3ab cebb e282ac他の代替として、インストールされている拡張機能に依存した関数ですが、 UConverter::transcode() と iconv() が挙げられます。
次のコードは、いずれも同じ結果を返します:
<?php
$iso8859_1_string = "\x5A\x6F\xEB"; // 'Zoë' in ISO-8859-1
$utf8_string = utf8_encode($iso8859_1_string);
echo bin2hex($utf8_string), "\n";
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$utf8_string = UConverter::transcode($iso8859_1_string, 'UTF8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$utf8_string = iconv('ISO-8859-1', 'UTF-8', $iso8859_1_string);
echo bin2hex($utf8_string), "\n";
?>上の例の出力は以下となります。
5a6fc3ab 5a6fc3ab 5a6fc3ab 5a6fc3ab