请帮我解决发布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,谁制作了这些表情符号字符?他毁了我的命!
答案 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)
收到此内容时
$postData = file_get_contents("php://input")
(我想这是一个真实的URL),请确保您的php脚本发送Content-Encoding标头(如下所示,选择适合您的MIME类型)
header("Content-Type: text/html; charset=utf-8");
答案 2 :(得分:1)
请按照以下步骤操作: