从ios到php的特殊字符和表情符号

时间:2013-10-02 16:39:38

标签: php ios string

我看了很多线程,但是我找不到正确的解决方案,或者它没有用......这让我很生气^^。

我尝试了很多东西,但没有一个能正常工作。

我的问题很容易......我想;)

我想从我的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'])));

这让我对所有不同的变种都感到困惑。 我希望有人能引导我朝着正确的方向前进。我们随时欢迎代码:)

4 个答案:

答案 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数据库到我的网站?