表情符号以JSON编码,发布到Web服务器

jan*_*del 4 php iphone encoding ios emoji

请在发布JSON解码的表情符号字符时遇到的问题帮助我。我有一个UITextView,此文本视图可能具有表情符号字符。我将UITextView.text呈现为JSON的数据发布到Web服务器,问题是当文本具有表情符号时,我无法获取数据。我要做的是:

$postData = file_get_contents("php://input") to get the data.
Run Code Online (Sandbox Code Playgroud)

然后我用

$post = json_decode($postData,true);
Run Code Online (Sandbox Code Playgroud)

解码数据并拥有一个assoc数组并将数据插入数据库中。

当我将数据插入数据库时​​,这是一个代码片段。

$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);
Run Code Online (Sandbox Code Playgroud)

没有找到表情符号字符,它可以正常工作。没问题。问题是当找到表情符号字符时,$ post中的数据(解码后的数据)为空。

我尝试使用伪数据(代码段中的第2行)

//$postData = '{"body":"characters here ???????","subject":"subject here","username":"janus","from_id":"185","to_id":"62"}';
Run Code Online (Sandbox Code Playgroud)

并且我成功地在数据库中插入了表情符号字符。我不知道为什么,但是当数据来自设备时它不起作用($ 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];
Run Code Online (Sandbox Code Playgroud)

顺便说一句,谁创造了这些表情符号字符?他毁了我的生活!

im3*_*r3k 5

数据发送到您的php脚本后,您需要将其转换为多字节字符串:

$content = mb_convert_encoding($content, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

您可以使用此功能:

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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:对我们来说,数据可能是application / x-www-form-urlencoded类型的,并且该函数正确地将其转换了。