- 締切済み
softbank(UTF-8)での機種依存文字について
携帯サイトを作っているのですが、softbankだけcharsetをUTF-8にしています。そのため、JISコード13区の機種依存文字が?になってしまいます。入力された文字列が?になって次の画面に渡ってきてしまうので、(1)などに変換することすらできません。 この場合、どのようにすればよろしいのでしょうか。 環境はDebian4.0,Apache2.2.3,PHP5.2.0です。どんな小さな情報でも構わないので、情報提供をお願いいたします!
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kinta03
- ベストアンサー率41% (7/17)
始めまして。 貴方の次に質問を投稿している「kinta03」と申します。 違うのかも知れませんが「ひょっとして凄く近い質問内容」では? と、思い回答しています。 まずは私の行いたい事を箇条書きします。 ・基本はPC/携帯からのフォーム入力でCharasetをSJISとしたい。 ・携帯各キャリアの絵文字の入力を「排除(置換え)」したい。 ・入力文字の変換不能文字を抽出して「排除(置換え)」をしたい。 ・上記理由はPC/携帯の両方から受け付けるので内部処理上 「絵文字/変換不能文字」まで対応したくない。 私の行っている設定を記述します。 ・「.htaccess」では次の記述をしています。 default_charset "Shift_JIS" mbstring.http_input "ASCII,SJIS-win" mbstring.internal_encoding "eucJP-win" mbstring.http_output "SJIS-win" mbstring.substitute_character "long" ・入力の流れは次のようになります。 入力は、SJIS-win 内部処理は、eucJP-win 出力は、SJIS-win 変換不能文字は、「W932+xxxx("long"指定)」を「排除(置換え)」 絵文字は、eucJP-winのコード範囲をmb_ereg(_replace)する sb絵文字は、'[\x1B]{1}[$]{1}[GEFOPQ]{1}[\x5C]*[!-z]{1}[\x0F]{1}'でmb_ereg(_replace)する ってな事をやっています。 多分、貴方の設定は mbstring.substitute_character "long" 又は mb_substitute_character("long")が設定されていないのでは? デフォルトでは「none」になっているか「no value」ではありませんか? 「none」の場合「?」に成らずnull文字になるはずですが「no value」と同様に「?」に変換されてしまうことがほとんどのようです(現時点での実験の範囲内では)。 「long」にして変換不能文字を積極的に処理したほうが良いみたいです。 特に、「internal_encoding」が何か分かりませんが default_charsetとかhttp_inputに指定しているコードページの様に 間口が広い物で受け取っていますか?間口が広ければ変換不能になることは ほとんど在りません(多分?)。つまり、 入口>>内部<<出口 とか 入口>>内部>>出口 だと変換不能が必ず発生します。 以前の私は、 mbstring.http_input "ASCII,SJIS" mbstring.internal_encoding "EUC-JP" mbstring.http_output "SJIS" で良いや!!などとしていて 実際の入力が「SJIS-win」の範囲で入ってくるものでボロボロに成っていました。 以上、私の勝手な意見です。 お気に触ったらご免なさい。 オブザーバの皆さん。間違いが有ると思います。 フォロー宜しくお願いします。