[PHP]外字の削除
昔作った記憶があるのだけど、どこかに失踪してしまったのでメモメモ。
ポイントは下記の1行。
mb_substitute_character("none");
あんまり自信ないので、おかしなところがあれば、ご指摘よろしくお願いします。
#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
# 外字の撲滅
#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
function deleteExternalFontsChar(
$str
){
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# 戻り値の初期化
$returnValue = $str;
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# 現在のmb系関数の設定状況をバックアップ
$bk_mb_language = mb_language();
$bk_mb_substitute_character = mb_substitute_character();
$bk_mb_internal_encoding = mb_internal_encoding();
$bk_mb_regex_encoding = mb_regex_encoding();
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# 日本語環境設定
mb_language("ja");
mb_internal_encoding("eucJP-win");
mb_regex_encoding(mb_internal_encoding());
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# 入力文字エンコーディングが無効、
# または出力文字エンコーディングに文字コードが存在しない場合の代替文字を指定(none:出力しない)
mb_substitute_character("none");
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# まずは、処理対象の文字列を、現在のエンコードに合わせる
$returnValue = @mb_convert_encoding( $returnValue, mb_internal_encoding(), $bk_mb_internal_encoding );
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# ざくっと外字撲滅
$returnValue = @mb_convert_encoding( $returnValue, "EUC-JP", mb_internal_encoding() );
$returnValue = @mb_convert_encoding( $returnValue, mb_internal_encoding(), "EUC-JP" );
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# 最後に、元の文字列エンコードに戻す
$returnValue = @mb_convert_encoding( $returnValue, $bk_mb_internal_encoding, mb_internal_encoding() );
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# mb系関数の設定状況をバックアップを復元
mb_language($bk_mb_language);
mb_substitute_character($bk_mb_substitute_character);
mb_internal_encoding($bk_mb_internal_encoding);
mb_regex_encoding($bk_mb_regex_encoding);
#--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
# ここで処理終了
return $returnValue;
}