[PHP-users 34594] Re: 変換不能文字の数値エンティティ化

clicker @ fooo.cjb.net clicker @ fooo.cjb.net
2009年 5月 28日 (木) 09:58:49 JST


自己レスです。
mb_substitute_character("long")ができるならひょっとしてと思い
PHPのソースコード見てみました。そしたらなんと none, long, entity
とあるではないですか!

試してみたところ、期待通りでした。
mb_substitute_character("entity");
$text = mb_convert_encoding($text, 'SJIS-win', 'UTF-8');

一応PHP5.2.6で確認しましたが、マニュアルに書いてないので、何か問題があって
experimentalなのかも知れません。使われる方は自己責任でお願いします。
# ってぜんぶ自己責任ですが..

>> 柳本です。
>> mb_substitute_character("long");
>> これとpreg_replace()あたりでどうですか?
> 
> ありがとうございます。
> mb_substitute_characterで、まさかそんな指定ができるとは。
> リファレンスをよく読んでませんでした、すいません。
> しかしこれでかなりいいところまで辿り着きました。
> 
> $subChar = mb_substitute_character();
> mb_substitute_character("long");
> $text = mb_convert_encoding($text, 'SJIS-win', 'UTF-8');
> $text = preg_replace('/U\+([0-9A-F]{1,5})/', '&#x$1;', $text);
> mb_substitute_character($subChar);
> 
> [0-9A-F]が後に続かないパターンならこれでOKのようです。
> 例えばU+118;のように終端があれば、きれいに置換できそうなんですが…
> 
> ---
> 武山


PHP-users メーリングリストの案内