日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP 5 » mb_substitute_characterをlongにしたときの変換不能文字の取り扱い?

mb_substitute_characterをlongにしたときの変換不能文字の取り扱い?

ページ: 1

投稿者 投稿
会員
登録者: 1 2008
返信数: 2
現在php5.1.6の環境(レンタル・サーバとローカルwin+ap2)で色々とテストを行っている、php初心者です。

早速、質問です。

mb_substitute_characterやmbstring.substitute_character
で"long"指定をしたときに返ってくる結果について知りたいのです。
「php マニュアル(chm)」には「例: U+3000,JIS+7E7E」としか記載されていません。
自分で調べた範囲では・・・
  U+,JIS+,JIS2+,W932+,I8859_1+,BAD+,?+
が有る様なんですが??そこで質問です。

1.各「+」の後に続くHexの桁数が知りたい。
  例にも有るように「U+3000,JIS+7E7E」の様に
  Hex4桁で固定と考えれば良いのでしょうか?
2.「U+やW932+やBAD+」などが現れる組み合わせを知りたい。
  現在iModeを想定しているので、以下の組み合わせを使っていますが
    mbstring.http_input "ASCII,SJIS-win"
    mbstring.http_output "SJIS-win"
    mbstring.internal_encoding "eucJP-win"
  これだと実験の限りでは「W932+xxxx」しか出てきません。
  他の組み合わせも実験したいのですが私の知識と環境では・・・
3.上記環境でSJISのFC4C(xxx.php?Text=%FC%4C)を与えたのですが
  「W932+972D」と成りました。
  FC4Cが何故に972Dに成るのでしょうか?

以上、ご存知の方。ご指導願います。
会員
登録者: 10 2007
返信数: 71
私も詳しいことは分からないのですが、とりあえず試してみました。
ここに書かれているmbstringの設定をコピーして%FC%4Cを与えてみたところ、「W932+972D」になりました。
さらにmbstring.encoding_translationをOnからOffにしてみたところ、「BAD+FC4C」になってきました。
残念ながらこれ以上はちょっとわかりませんでした。

余計なお世話かもしれませんが、MSIMEのIMEパッドで探してみたところ、シフトJISのFC4Cは文字が定義されていないようでしたが、シフトJISのFC4BとJISの972Cが同じ字になっています。
この場合だと、%FC%4Cの文字エンコーディング変換でシフトJISから日本語EUCに変換する際に、に存在しない文字?が来てしまったということですから、結局一体どんな動作をするのでしょうね・・・。
会員
登録者: 1 2008
返信数: 2
kona@mさん、有り難う御座います。
昨夜は都合で掲示板確認できませんでした。
ご返事、有り難う御座います。

>>シフトJISのFC4Cは文字が定義されていないようでしたが
はい。あえてエラーになるように「%FC%4C」を使いました。

mbstring.encoding_translationは携帯等のSJIS設定の記載に従いOnにしていました。
Offで「BAD+」に成ることは確認していませんでした(^_^;)

「.htaccess」の具体的な記載は以下の通りです。
php_value default_charset "Shift_JIS"
php_value output_buffering "1"
php_value output_handler "mb_output_handler"
php_value mbstring.func_overload 0
php_value mbstring.detect_order "auto"
php_flag mbstring.encoding_translation On
php_value mbstring.http_input "ASCII,SJIS-win"
php_value mbstring.http_output "SJIS-win"
php_value mbstring.internal_encoding "eucJP-win"
php_value mbstring.language "Japanese"
php_value mbstring.substitute_character "long"

変換不能をmb_ereg(_replace)する為にHex4桁で引っ掛ければ良いのかが疑問でした。
また、解るので在れば「U+やW932+やBAD+」が現れる組み合わせが知りたかったのです。
その全てをmb_ereg(_replace)しても構わないのですがHexの桁数が解らないと
「W932+xxxx1234」の様に変換不能文字の後に有効な文字「1234」が続くと
有効な文字まで取り込んで代替してしまう可能性があるので・・・質問しました。

また、「%FC%4C」が「W932+972D」に成ることは特に現時点では問題無いのですが
ゆくゆく何らかの変換テーブルでも作る段階になった時に理由を知っておいたほうが良いと思い
質問しました。

皆さん、宜しくお願いします。

ページ: 1

日本PHPユーザ会 掲示板 » PHP 5 » mb_substitute_characterをlongにしたときの変換不能文字の取り扱い?

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています