質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1033閲覧

AndroidからPHPにPOSTすると、絵文字が????になってしまう

v97ug

総合スコア7

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/09/19 02:58

編集2022/09/19 22:29

発生している問題

Android端末からPHPにPOSTリクエストすると、絵文字が????になってしまいます。。
iOSではきちんと絵文字が表示されるのですが、Androidではなぜか????に変換されてしまいます。

該当のソースコード

php

1$json = file_get_contents('php://input'); 2$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 3$data = json_decode($json, true);

試したこと

file_get_contents('php://input');の値を見てみましたところ、この時点で????になっているようでした。

フロントエンドからは特にエンコードなどはせずそのまま文字列をPOSTリクエストしております。

補足情報(FW/ツールのバージョンなど)

サーバーはXserver、言語はPHP 7.4

追記20220920

・フロントエンドはaxiosでPOST送信しております。
・Androidのバージョンは、11と12で試しましたが、どちらも絵文字のみ????となりました。
・全角文字は正しく表示されています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/09/19 03:55

Webサイトの文字コードは何にしていますか?
m.ts10806

2022/09/19 03:59

全角文字も試してみてください。
v97ug

2022/09/19 05:29

メッセージありがとうございます。 全角文字は文字化けせず正しく表示されます。 Webサイトの文字コードはUTF-8です。
guest

回答2

0

Webサイトの文字コードはUTF-8です。

では、mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');は何のために入れているのでしょうか。UTF-8のWebサイトであればPOSTデータもUTF-8になるでしょうし、おそらく不要です。

投稿2022/09/19 06:09

maisumakun

総合スコア146583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

v97ug

2022/09/19 22:31

ご回答ありがとうございます。 mb_convert_encodingの記述をなくして試したのですが、同じく絵文字のみが????になってしまいました。。
guest

0

自己解決

自己解決しました。

MySQLの文字コードを全てutf8からutf8mb4に変更することで上手くいきました。
(データベース・テーブル・カラム名・PDOの設定も含めて)

データベースの変更

sql

1ALTER DATABASE データベース名 DEFAULT CHARACTER SET utf8mb4;

テーブルの変更

sql

1ALTER TABLE テーブル名 DEFAULT CHARACTER SET utf8mb4;

カラム名の変更

sql

1ALTER TABLE テーブル名 MODIFY カラム名 データ型 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci

PDO接続の変更

sql

1$dsn = 'mysql:host=localhost;dbname=データベース名;charset=utf8mb4';

投稿2023/05/12 07:31

v97ug

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問