###前提・実現したいこと
Unity3D(c#)にて、inputfieldでユーザ入力を受け取りJsonUtility.ToJsonでJSON 形式に変換後、それをサーバー(PHP)へ送りデコードしてデータベースに保存したいのですが、デコード時にユーザ入力全角文字(2バイト文字?)が空文字になります。全角文字が消えないようにするにはどうすればいいのでしょうか?
全角と半角英字の混合文だと半角英字のみ残ります (例: aあ [decode]→ a)
PHPのデコード部分に問題があると思い、いろいろと調べてみましたが解決に至りませんでした。
お力添えお願いいたします
###発生している問題・エラーメッセージ
デコード時にBOMを除く処理を入れないと json_last_error() で Control character error, possibly incorrectly encoded\r+ が出る状態です
###該当のソースコード
c#
1//Unity3D側 2using UnityEngine; 3using System.Collections; 4using System; 5 6public class DB_Test : MonoBehaviour { 7 8 public InputField inp; //ユーザ入力のためのinputfield 9 const string LOCALDOMAIN = "localhost"; 10 string m_url = "http://" + LOCALDOMAIN + "/phptest.php"; 11 12 //jsonにして phpへ渡すクラス 13 [Serializable] 14 class MyJsonClass 15 { 16 public string mydata; //ユーザ入力をここへいれる 17 } 18 19 //ボタンイベントで開始 20 public void OnButton() 21 { 22 try 23 { 24 WWWForm form = new WWWForm(); //データ送信準備 25 26 MyJsonClass gs = new MyJsonClass(); 27 gs.mydata= inp.text; //inputfieldの値を phpへ渡すクラスのメンバー変数に代入 28 29 string str = JsonUtility.ToJson(gs); //クラスをJson形式に変換 30 form.AddField("post", str); 31 WWW result = new WWW(m_url, form); // Web にシンプルにアクセスします 32 }catch(Exception e) 33 { 34 Debug.Log("error"+e.ToString()); 35 } 36 } 37}
php
1// サーバー側 2<?php 3 4// DB接続処理. 5require_once dirname(__FILE__) . '/db_Conf.php'; 6// 出力形式の設定 JSON形式で送信 7header( 'Content-type: application/json; charset=UTF-8' ); 8 9 10 //JSON文字列をデコード(復号)するユーザ定義関数 引数にJson文字列 11 function deco($js) 12 { 13 //BOMをとってデコード 14 $obj=json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$js),false); 15 16 if (json_last_error() === JSON_ERROR_NONE) { 17 return $obj; 18 }else { 19 exit; // エラーがあれば終了 20 } 21 } 22 23 $db = getDb(); //DBへの接続を確立 24 $jsondata=$_POST['post']; //簡単のために直接代入 25 $obj=deco($jsondata); //オブジェクト型でデコード 26 27 //----------DB登録---------- 28 $stt=$db->prepare('insert into u2 (mydata) values (:data)'); 29 $stt->bindvalue(':data',$obj->mydata); 30 $stt->execute(); //実行
###補足情報(言語/FW/ツール等のバージョンなど)
Unity3d 5.3.5f1 (64bit)
PHP 7.0.8
phpエディタ Visual Studio code (UTF-8)
db PostgreSQL

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 02:21