mb_substitute_character

関数の概要

mb_substitute_characterは、PHPのマルチバイト文字列関数の一つで、文字コード変換時に変換できない文字を置き換える代替文字を設定または取得するための関数です。特に、文字エンコーディングの変換でエラーを防ぎたい場合に便利です。

パラメータの説明

  • $substchar(省略可能): 代替文字を指定します。文字列で直接指定するか、特定のキーワード(”none”, “internal”, “long”)を使うことも可能です。

戻り値

現在設定されている代替文字を返します。引数を指定した場合は、設定変更前の代替文字を返します。初期状態は “none”(代替文字を出力しない)です。

使用例

基本的な使い方

<?php
// 代替文字を「?」に設定する
mb_substitute_character('?');
// 設定した代替文字を取得
echo mb_substitute_character(); // 出力: ?
?>

この例では、変換できない文字を「?」に置き換えるよう設定しています。

文字コード変換時の代替文字利用例

<?php
mb_substitute_character('?');
$str = "あいうえおxFF";
$converted = mb_convert_encoding($str, 'UTF-8', 'SJIS');
echo bin2hex($converted);
?>

Shift-JISには存在しない「xFF」バイトを含む文字列をUTF-8に変換する際、代替文字「?」で置き換えられます。

代替文字を「none」に設定して置き換えを無効化

<?php
mb_substitute_character('none');
$str = "Hello x80 World!";
echo mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1');
?>

この例では代替文字を使わず、変換できない文字がスキップされたり無視された状態になります。

関連する関数

  • mb_convert_encoding – 文字エンコーディングを変換する関数
  • mb_internal_encoding – 内部文字エンコーディングを設定または取得する関数
  • mb_encode_numericentity – 数値エンティティにエンコードする関数

まとめ

mb_substitute_characterは文字コード変換時に変換できない文字をどのように扱うかを制御できる重要な関数です。適切に設定することで文字化けを防ぎ、ユーザーに分かりやすい表示が可能になります。実務では文字コード変換を扱う場面でエラーや不明文字を抑制したい場合に活用すると便利です。