表情符号转换为JSON编码,发布到Web服务器

时间:2011-08-25 17:41:23

标签: php ios iphone encoding emoji

请帮我解决发布JSON解码表情符号字符的问题。 我有一个UITextView,这个文本视图可能有一个表情符号字符。我将数据发布到Web服务器,UITextView.text显示为JSON,问题是当文本有表情符号时,我无法获取数据。我所做的是:

$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(解码数据)中的数据为空。

我尝试使用虚拟数据(代码片段中的第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];
BTW,谁制作了这些表情符号字符?他毁了我的命!

3 个答案:

答案 0 :(得分:4)

将数据发送到您的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并且该函数正确转换了它。

答案 1 :(得分:1)

表情符号最有可能在UNICODE中进行转码,因此以UTF-8发送,接收和管理您的数据就足够了。

收到此内容时

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

(我想这是一个真实的URL),请确保您的php脚本发送Content-Encoding标头(如下所示,选择适合您的MIME类型)

 header("Content-Type: text/html; charset=utf-8");

答案 2 :(得分:1)

请按照以下步骤操作:

  • 将表情符号转换为base64并发送到服务器。
  • 在服务器端将base64保存在数据库中而不进行解码。
  • 如果要在应用程序上显示表情符号,则从服务器检索相同的base64数据。
  • 解码检索字符串并在应用上显示。
  • 您的表情符号字符将正确显示。