前提・実現したいこと
APIから取得したJSONをPHPにてMYSQLのデータベースに登録したい。
JSONテキストをjson_decode()で配列に変換すると、
読めないユニコード文字が文字列として取り扱えない。
なお、受信しているJSONはLINEからのJSONであり
LINE独自の絵文字が返信されてきています。
「\uDBC0\uDC8D」
このため通常のブラウザでは表示できず????となっています。
この文字列を「\uDBC0\uDC8D」のままでMySQLに登録したい。
json_decodeを使うと文字化けするため、
使用せずに該当文字列だけ取り出して変数に
そのまま入れることはできないでしょうか。
発生している問題・エラーメッセージ
デコード前
string(xx) "{"Message":"\uDBC0\uDC8D"}"
デコード後
array(1) { ["Message"]=> string(4) "????" }
サーバー環境
PHP7.2.1 mysql5.2
該当のソースコード
$json = json_decode($json,true);
$Message = $json["Message"];
var_dump($Message);
<質問への返答及び追記>
(1)「普通の日本語など、他のマルチバイト文字列はどうしたいですか?」
LINE絵文字 と 日本語文字列 が一緒に送信されてくるため、
他のマルチバイト文字列は日本語のテキストとして、mysqlに登録したいです。
例えば、「\uDBC0\uDC8Dこんにちは」というように登録したいです。
(2)「取り扱えない」の意味について
json_decodeした後に、\uDBC0\uDC8Dという英数字のままでmysqlに登録したいのですが
外字のため変換されてしまい英数字のままにできないという意味です。
⇒追記
\uDBC0\uDC8Dの文字がブラウザで表示されずに「????」になっているだけのようすです。
mysqlもブラウザからphpmyadminで中を見ているので「????」が登録されています。
この「????」をLINEに送信すると元の絵文字が表示されました。
単にブラウザで表示できていないだけのようです。
(3)外字に対するグリフが見つからないだけでは?
すみません、その通りです。
初心者なので外字が見つからないために表示されないので、どのように対処すべきかわからない状況です。
(4)バイナリデータとしてデータベースに登録すれば?
バイナリデータとして登録したことがないので調べながら試してみます。













回答5件
あなたの回答
tips
プレビュー