4

JSON でデコードされた絵文字を投稿する際の問題を解決してください。UITextView があります。このテキスト ビューには絵文字が含まれている場合があります。JSON として提示された UITextView.text を使用してデータを Web サーバーに投稿しています。問題は、テキストに絵文字が含まれている場合、データを取得できないことです。私がすることは:

$postData = file_get_contents("php://input") to get the data.

それから私は使用します

$post = json_decode($postData,true);

データをデコードして連想配列を作成し、データベースにデータを挿入します。

これは、データをデータベースに挿入するときのコード スニペットです。

$postData = file_get_contents("php://input");
//$postData = '{"body":"characters here ","subject":"subject here","username":"janus","from_id":"185","to_id":"62"}';
    $post = json_decode($postData,true);
        $data=array(
                'user_id_from'=>mysql_real_escape_string($post['from_id']),
                'user_id_to'=>mysql_real_escape_string($post['to_id']),
                'subject'=>mysql_real_escape_string($post['subject']),
                'message'=>mysql_real_escape_string($post['body']));

                $messages_obj->insert($data);

絵文字が見つからなくても、問題なく動作します。問題なし。問題は、絵文字文字が見つかった場合、$post のデータ (デコードされたデータ) が null になることです。

ダミーデータを使用してみました (コード スニペットの 2 行目)

//$postData = '{"body":"characters here ","subject":"subject here","username":"janus","from_id":"185","to_id":"62"}';

絵文字をデータベースに挿入することに成功しました。理由はわかりませんが、データがデバイスからのものである場合は同じように機能しません ($postData = file_get_contents("php://input"))

これは、クライアントでデータをエンコードして投稿する方法です。

    NSMutableDictionary *messageDetails = [[NSMutableDictionary alloc] init];
[messageDetails setObject:[loginItems objectForKey:@"user_id"] forKey:@"from_id"];
[messageDetails setObject:recipientID forKey:@"to_id"];
[messageDetails setObject:@"subject here" forKey:@"subject"];
[messageDetails setObject:newMessageField.text forKey:@"body"];
    [messageDetails setObject:[loginItems objectForKey:@"username"] forKey:@"username"];


NSString *strPostData = [messageDetails JSONRepresentation];
[messageDetails release];

NSData *postData = [NSData dataWithBytes:[strPostData   UTF8String] length:[strPostData  length]];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:postData];
4

3 に答える 3

5

データがphpスクリプトに送信されたら、それをマルチバイト文字列に変換する必要があります。

$content = mb_convert_encoding($content, 'UTF-8');

この関数を使用できます:

function cb($content){

  if(!mb_check_encoding($content, 'UTF-8')
   OR !($content === mb_convert_encoding(mb_convert_encoding($content, 'UTF-32', 'UTF-8' ), 'UTF-8', 'UTF-32'))) {

    $content = mb_convert_encoding($content, 'UTF-8');

  }
  return $content;
}

編集:データはおそらくapplication / x-www-form-urlencodedタイプであり、その関数はそれを正しく変換しました。

于 2011-09-07T17:15:00.407 に答える
1

emoji characters are most likely transcoded in UNICODE, so it should be sufficient to just send, receive and manage your data in UTF-8.

When receiving with this

$postData = file_get_contents("php://input") 

(I suppose that is a real URL), make sure your php script sends an Content-Encoding header (like the following, choose a MIME-type that suits you)

 header("Content-Type: text/html; charset=utf-8");
于 2011-08-25T17:55:42.777 に答える
1

次の手順に従ってください。

  • 絵文字を base64 に変換してサーバーに送信します。
  • サーバー側では、base64 をデコードせずにデータベースに保存します。
  • アプリケーションに絵文字を表示する場合は、サーバーから同じ base64 データを取得します。
  • 取得文字列をデコードしてアプリに表示します。
  • 絵文字が正しく表示されます。
于 2013-05-14T12:42:53.310 に答える