PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPでASCIIをUTF-8エンコーディングに変換する方法


現在の文字エンコーディングがASCIIであることが分かっている場合、iconv関数を使用することで、文字列をUTF-8に変換できます。iconv関数には、「入力エンコーディング」「出力エンコーディング」「変換対象となる元の文字列」の3つを引数として渡します。

方法1:iconv関数で変換する

サンプルコード

<?php
    $str = "ábrêcWtë";
    echo '元の文字列:', $str, PHP_EOL;
    echo '変換後の文字列:', iconv("ISO-8859-1", "UTF-8", $str), PHP_EOL;
?>

特殊文字を含む文字列を変数「$str」に代入し、iconv関数に渡しています。第1引数には現在のエンコーディング(ここではISO-8859-1)、第2引数には変換先のエンコーディング(UTF-8)を指定します。これにより、文字列がUTF-8へと変換されます。

実行結果

元の文字列:ábrêcWtë
変換後の文字列:ábrêcWtë

UTF-8対応の環境で表示すると、変換前後の文字列はどちらも同じように表示されます。これは、文字列が正しくUTF-8として処理されていることを示しています。なお、引数で指定するエンコーディングの向きを誤ると、表現できない文字が「?」などに置き換えられてしまうため注意が必要です。

方法2:mb_convert_encoding関数で検出しながら変換する

もうひとつの方法は、mb_detect_encoding関数で現在のエンコーディングを検出した上で、mb_convert_encoding関数を使って適切なエンコーディングへ変換するやり方です。こちらはマルチバイト文字列の処理に強いmbstring拡張モジュールを利用するため、日本語などを含む文字列にも安心して使えます。

サンプルコード

$string = "ábrêcWtë";
print(mb_detect_encoding($string));
$string = mb_convert_encoding($string, "UTF-8");
print(mb_detect_encoding($string));

特殊文字を含む文字列を変数「$string」に代入します。mb_convert_encoding関数に文字列と変換先のエンコーディング(UTF-8)を渡すことで、文字列がUTF-8に変換されます。変換の前後でmb_detect_encoding関数を呼び出すことで、実際にエンコーディングが変化したことを確認できます。

実行結果

UTF-8UTF-8

まとめ

  • iconv関数:元のエンコーディングが分かっている場合に、シンプルに変換できる。
  • mb_convert_encoding関数:mb_detect_encoding関数と組み合わせれば、エンコーディングが不明な文字列でも安全にUTF-8へ変換できる。

用途に応じてこれらの関数を使い分けることで、PHPにおける文字エンコーディングの問題を効果的に解決できます。

  1. PHPのord()関数とは?文字列からASCII値を取得する方法を解説

    PHPのord()関数は、文字列の先頭文字に対応するASCII値(文字コード)を整数で返す組み込み関数です。文字と数値コードの相互変換が必要な場面でよく利用されます。構文ord(string $string): intパラメータstr($string) − ASCII値を取得したい対象の文字列を指定します。文字列全体が渡された場合でも、評価されるのは最初の1バイト目のみです。戻り値ord()関数は、引数として渡された文字列の先頭文字に対応するASCII値を、0〜255の範囲の整数として返します。空の文字列を渡した場合は0が返されます。使用例次の例では、文字列「welcome」の先頭文字である「

  2. PHPのchr()関数とは?ASCII値を文字に変換する方法をわかりやすく解説

    PHPの chr() 関数は、指定されたASCII値(文字コード)を対応する1文字に変換して返す関数です。数値のコードから実際の文字を取得したい場合に使用します。 基本構文 chr(ascii) パラメータ ascii − 文字に変換したいASCII値(0〜255の整数)を指定します。10進数のほか、16進数や8進数で指定することも可能です。 戻り値 渡されたASCII値に対応する1文字を文字列として返します。 逆に、文字からASCII値を取得したい場合は ord() 関数を使用します。chr() と ord() は互いに補完関係にある関数です。 使用例 まずは、ASCII