[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 メーリングリストの案内