[リストへもどる]
一括表示
タイトルUTF-8のサイトでのドコモからのフォーム投稿
記事No1013
投稿日: 2013/08/23(Fri) 23:44:47
投稿者qwerty
UTF-8でphp5.4とMySQL5.6を利用し掲示板を作成しています。

ドコモからの投稿で絵文字を変換しようとすると、文字化けしてしまいます。

iモード2.0対応機種のため、S-JISに変換しないでもUTF-8で表示されてフォームから投稿されるデータもUTF-8になっているようで、コード変換を行わずとも通常の投稿は文字化けしません。
ですので、コード判別フィルタを通さずに$emoji->filter($text, array('DecToUtf8', 'HexToUtf8'));だけを利用し変換を行おうとしたのですが、化けてしまいました。
ちなみに普通のinputフィルタでの変換を通すとSJISとして処理されるようで、こちらも文字化けします。

ドコモの場合S-JISで表示させるしかないのでしょうか?
メインのテンプレートphpから各ページデータのphpをパラメータで指定し読み込んで表示するタイプのサイトを作っているので、全体をS-JISに変更するのは難しい状況です(header関数が使用しづらい)。

文字コード関連はあまり詳しくない物で、ご指導頂けると幸いです。
よろしく御願い致します。

タイトルRe: UTF-8のサイトでのドコモからのフォーム投稿
記事No1014
投稿日: 2013/08/24(Sat) 08:03:13
投稿者revulo
とりあえず、以下の設定をしてみて下さい。

require_once 'HTML/Emoji.php';
$emoji = HTML_Emoji::getInstance();
// どの端末でも UTF-8 で入出力するように変更
$emoji->utf8 = true;

この場合、

・Input フィルタは、DecToUtf8 & HexToUtf8 フィルタと同等
・Output フィルタは、Carrier フィルタと同等

になります。

それでも、文字化けするのであれば、
具体的にどういう絵文字が、どのフィルタを適用した時点で、どう化けるかを、
教えていただけませんか?

よろしくお願いします。

タイトルRe^2: UTF-8のサイトでのドコモからのフォーム投稿
記事No1015
投稿日: 2013/08/24(Sat) 11:52:12
投稿者qwerty
UTF-8の設定を追加したら無事に動きました!

一つ伺いたいのですが、UTF-8の設定をした場合にau機種はどうなるのでしょうか?
色々調べてauがUTF-8に弱いことはわかったのですが、手元にauの実機はなく、また海外におります都合上、試すことも難しい状況です。

au機種に対応させたい場合、UAなどでau以外を判断してUTF-8指定するなどした方がいいのでしょうか?

度々申し訳ございませんが、教えていただけると幸いです。
よろしくお願い致します。

タイトルRe^3: UTF-8のサイトでのドコモからのフォーム投稿
記事No1016
投稿日: 2013/08/25(Sun) 07:28:18
投稿者revulo
実は私も au の実機は持っていないのですが、
・おそらく、au も UTF-8 で大丈夫
・ただし可能ならば Shift_JIS の方が安全
という状況だと思います。

古い情報ですが、
http://www.symmetric.co.jp/blog/archives/113
にあるように、SSL を使う場合は Shift_JIS でなければいけないようです。
au だけ Shift_JIS で運用したい場合は、次のように設定して下さい。

if ($emoji->getCarrier != 'au') {
$emoji->utf8 = true;
}

タイトルRe^4: UTF-8のサイトでのドコモからのフォーム投稿
記事No1017
投稿日: 2013/08/25(Sun) 18:41:27
投稿者qwerty
どうもありがとうございます。
SSLは使っていないので、とりあえず全てUTF-8で運用して様子を見ることにします。
一応知人に確認してもらった結果、閲覧に関してはUTF-8でも問題なかったようで、書き込みに関しては絵文字関連以外の問題もあり、これから検証致します。
もし何かわかったことがありましたらまたお伝えさせていただきます。

あと、iPhone5でも絵文字の利用を可能にしたかったので他の方のスレッドからβ版をDLさせていただき使用させていただいておりますが、新しく追加になったUnicode6.1の絵文字についての対応がまだということで、暫定的にこの絵文字を取り除くコードを書いて使用しておりますので、一応こちらに貼っておきます。

$text = preg_replace("/(\xF0\x9F\x98\x80|\xF0\x9F\x98\x91|\xF0\x9F\x98\x95|\xF0\x9F\x98\x97|\xF0\x9F\x98\x99|\xF0\x9F\x98\x9B|\xF0\x9F\x98\x9F|\xF0\x9F\x98\xA6|\xF0\x9F\x98\xA7|\xF0\x9F\x98\xB4)/","",$text);

inputフィルタで入力された絵文字をUTF-8変換した後に使用すれば、追加された13の顔文字だけ削除するごく単純なコードですが、他の機種での文字化けなどが防げますのでよろしければご利用下さい。

迅速なサポート、どうもありがとうございました。