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

请帮我解决我发布JSON解码表情符号的问题。 我有一个UITextView,这个文本视图可能有一个表情符号。 我将这些数据发布到Web服务器上,并以UITextView.text的forms显示为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); 

没有find表情符号,它可以正常工作。 没问题。 问题是当发现表情符号字符时,$ 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]; 

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

一旦数据发送到你的PHP脚本,你需要将其转换为一个多字节string:

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

你可以使用这个function:

 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; } 

编辑:数据可能是typesapplication / x-www-form-urlencoded为我们和该函数正确地转换它。

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

当这个接收

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

(我想这是一个真正的URL),确保你的PHP脚本发送一个内容编docker(如下,select一个适合你的MIMEtypes)

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

请按照以下步骤操作:

  • 将Emoji字符转换为base64并发送到服务器。
  • 在服务器端保存数据库中的base64而不解码。
  • 当你想在应用程序上显示表情符号,然后从服务器检索相同的base64数据。
  • 解码检索string并在应用程序上显示。
  • 您的表情符号会正确显示。