我看了很多线程,但我没有找到正确的解决方案,或者它不起作用......这让我很生气^^。
我尝试了很多东西,但没有一个正常工作。
我的问题很容易..我认为;)
我想从我的iPhone发送文本到php脚本,然后将其保存在SQL数据库中。
首先,特殊字符不起作用。A " 将是 "\quot;(不带 \ :O )等等。接下来,从iPhone到php的表情符号更改为例如ðŸ ̃。
这是我的iPhone代码,用于向php发送文本:
NSString *post = [[NSString alloc] initWithFormat:@"&action=messageAdd&text=%@"textField.text];
NSData * postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSString * postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://xxxx.com/xx.php"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
这里是来自 PHP 文件的代码
header('Content-Type: text/html; charset=utf-8');
..
..
..
$text = htmlentities(trim(stripinput($_POST['text'])));
这让我对所有不同的变体感到困惑。我希望有人能引导我朝着正确的方向前进。代码总是受欢迎的:)
当您将带有表情符号的数据字符串发送到您的 PHP 页面时,您必须使用此编码:
NSData *data = [string dataUsingEncoding:NSNonLossyASCIIStringEncoding];
如果您必须发送此数据的字符串,则可以使用以下方法将其转换为字符串:
NSString str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
所以,你会有一个像 \ucode 而不是微笑的字符串。
当您从数据库接收到应用程序的字符串时,您可以执行以下操作:
NSString str = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
名声大作;)
关于表情符号:
表情符号的问题可能来自编码差异(即您的 php 页面显示的文本编码与 iPhone 发送文本时使用的文本编码不同)。
关于报价:
当你调用htmlentities()
时,你专门将具有html等价的字符转换为该html等价字符。这意味着"
将被转换为 "
.
您可以使用 ENT_NOQUOTES
标志使此函数保持单引号和双引号未转换:
$text = htmlentities(trim(stripinput($_POST['text'])), ENT_NOQUOTES);
请注意,如果引号会影响您在其他地方对文本执行的操作,则这可能是危险的。如果引号改变了 html 的适用方式,则输出到页面的字符串可能会奇怪地呈现,如果您没有正确考虑数据库相关代码中的引号,数据库交互可能会受到影响。
我有一个类似的问题,我通过使用以下方法存储文本的 base64 编码字符串来解决 MSSQL 存储部分而不更改数据库:
+(NSString*) base64EncodeString:(NSString*)string {
return [@"b64:" stringByAppendingString:[[string dataUsingEncoding:NSUTF32BigEndianStringEncoding] base64EncodedStringWithOptions:0]];
}
+(NSString*) base64DecodeString:(NSString*)string {
if ([string hasPrefix:@"b64:"]) {
string = [string substringFromIndex:4];
string = [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:string options:0] encoding:NSUTF32BigEndianStringEncoding];
}
return string;
}
请注意,我在字符串前面加上了 b64:,所以我的代码仍然可以处理非编码文本。
它按照我想要的方式工作,我现在可以将表情符号和多字节字符保存在我的 MS-SQL 服务器上,并从我的 IOS 设备中检索它们,而无需担心我的数据库排序规则。
这也解决了单引号问题。
但!我也遇到了和你一样的问题。我想让我的PHP网站显示表情符号和MB字符。
我终于解决了这个问题!但是现在有一个新的问题。
我将数据库更改为 utf8MB4,并在连接到我调用的数据库后
mysql_query("SET NAMES 'utf8mb4'");
在数据库中,表情符号显示为
?
但在iOS设备上,它显示为表情符号。
现在的问题是,如何将"?"从MySQL数据库显示到我的网站?