php - 表情符号到 JSON 编码,发布到网络服务器

标签 php ios iphone encoding emoji

请帮助我解决发布 JSON 解码表情符号字符时遇到的问题。 我有一个 UITextView,这个 TextView 可能有一个表情符号字符。我将数据发布到 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];

最佳答案

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

关于php - 表情符号到 JSON 编码,发布到网络服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7194800/

相关文章:

ios - 尝试获取 UIImage 的当前值

ios - 快速将从用户照片中收集的 UIImage 引用到 Dict 中

iphone - LocalStorage 不适用于 iPad 和 iPhone

javascript - 使用 select-2 插件进行编辑时国家/地区下拉列表不起作用

php - 如何从 Redux Framework color_rgba-type 设置 rgba 背景颜色?

iphone - 如何使用 PayPal API Xcode 上线

iphone - 按字母顺序排列数组

php - 从当前日期时间生成唯一的交易 ID

php - 从 Facebook 注销后,我的 Facebook 应用程序仍然登录

iphone - NSURL 连接在 3g 上失败 'network connection was lost'