我看了很多线程,但是我找不到正确的解决方案,或者它没有用......这让我很生气^^。
我尝试了很多东西,但没有一个能正常工作。
我的问题很容易......我想;)
我想从我的iphone发送文本到php脚本,然后将其保存在SQL数据库中。
首先,特殊字符不起作用。 “将是&”(没有\: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'])));
这让我对所有不同的变种都感到困惑。 我希望有人能引导我朝着正确的方向前进。我们随时欢迎代码:)
答案 0 :(得分:5)
当您将带有表情符号的数据字符串发送到您的php页面时, 你必须使用这种编码:
NSData *data = [string dataUsingEncoding:NSNonLossyASCIIStringEncoding];
如果你必须发送一个这样的数据字符串,你可以用字符串转换它:
NSString str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
所以,你会有一个喜欢 \ ucode 的字符串,而不是微笑。
当您从数据库收到字符串到应用程序时,您可以执行以下操作:
NSString str = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
并且成名了。 ;)
答案 1 :(得分:0)
表情符号可能来自编码差异(即你的php页面没有显示与iphone发送文本时使用的文本编码相同的文本编码)。
当您致电htmlentities()
时,您专门将具有html等效内容的字符转换为该html等效字符。这意味着"
将转换为"
。
您可以使用ENT_NOQUOTES
标志使此函数保留未转换的单引号和双引号:
$text = htmlentities(trim(stripinput($_POST['text'])), ENT_NOQUOTES);
请注意,如果引号会影响您在其他地方使用文本执行的操作,则此操作可能会很危险。如果引号改变了html的适用方式,则输出到页面的字符串可能会异常呈现,如果您没有正确地考虑数据库相关代码中的引号,则数据库交互可能会受到影响。
答案 2 :(得分:0)
我有类似的问题,我通过使用以下方式存储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设备中检索它们而不必担心我的数据库整理。
这也解决了单引号问题。
BUT!我也遇到了和你一样的问题。我想让我的PHP站点显示表情符号和MB字符。
答案 3 :(得分:-1)
我终于解决了这个问题! 但现在有一个新问题..
我将数据库更改为utf8mb4,并在连接到数据库后调用
mysql_query("SET NAMES 'utf8mb4'");
在数据库中,表情符号显示为
但在ios设备上,它会显示为表情符号。
现在的问题是如何显示“?”从mysql数据库到我的网站?