表情符号到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并在应用程序上显示。
- 您的表情符号会正确显示。