userinfo.myhome.php,iOS实战演练之关于数据交互的问题(利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能)...

本文介绍了在使用XAMPP搭建本地服务器并用PHP实现iOS端注册登录功能时遇到的两个问题及解决方案。问题1是数据库中文字段在客户端显示为问号,通过修改MySQL的my.cnf文件设置utf8字符集得以解决。问题2是接收到的中文数据为Unicode编码,通过编写解码方法成功转换回中文。详细步骤和代码示例给出了解决这两个问题的方法。
摘要由CSDN通过智能技术生成

在做我的demo的时候,我选择利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能,具体实现参考[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能一文,同时感谢简书作者M_Lee先生对我提出的一些疑问的简答。

废话不多说,我们来看实际上会遇到的一些问题:

1、数据库的UserInfo表中的中文字段传入客户端无法被识别,显示??

这个问题困扰了我很久,在网上找到的方案也是五花八门,最后在M_Lee先生的指导下才解决这个问题。

主要解决方案是在Mysql数据库的配置文件my.cnf中设置默认字符集utf8

首先找到my.cnf的路径

0818b9ca8b590ca3270a3433284dd417.png

修改my.cnf

[client]

default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake

注意:

在 mysqld 中使用 default-character-set 设置, mysql 启动会报错而无法启动。

说明

关于utf8字符集,我们国内默认选择:utf8_general_ci而不是utf8_unicode_ci,

区别在于字符对比上

请看mysql上面的例子:

对与general来说 ß = s 是为true的

但是对于unicode来说 ß = ss 才是为true的,

其实他们的差别主要在德语和法语上,所以对于我们中国人来说,一般使用general,因为general更快

如果你对德语和法语的对比有更高的要求,才使用unicode,它比general更准确一些(按照德语和法语的标准来说,在对比或者排序上更准确)

写loginGet.php

数据库中表数据:

0818b9ca8b590ca3270a3433284dd417.png

注意$row[ ]指的是表中对应字段,因为 $row[3]指的是Password密码字段,所以不能将该字段传入客户端。

在客户端中打印responseObject(ps:关于客户端如何写登录,如何与php服务器端交互可见[[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能]

0818b9ca8b590ca3270a3433284dd417.png

可见cname中文字段打印出来的不再是??即已解决该问题。

2、在问题1中,我们可以看到中文传进来变为了一串不知道是什么的字符串:cname = "\\U6e7e\\U91cc\\U6700";,这是什么呢?

这是Unicode编码,从本质来说UTF-8也是一种Unicode编码。现在我们需要将这个Unicode编码进行解码,得到我们需要的中文字段。

在SCStringUtil中写一个方法:

+ (NSString*) replaceUnicode:(NSString*)aUnicodeString

{

NSString *tempStr1 = [aUnicodeString stringByReplacingOccurrencesOfString:@"\\u"withString:@"\\U"];

NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\""withString:@"\\\""];

NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];

NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];

NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData

mutabilityOption:NSPropertyListImmutable

format:NULL

errorDescription:NULL];

return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n"withString:@"\n"];

}

通过调用这个方法进行解码

NSLog(@"%@",[SCStringUtil replaceUnicode:responseObject[@"cname"]]);

打印结果为:

0818b9ca8b590ca3270a3433284dd417.png

解决该问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值