1

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

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

我的问题很简单..我想;)

我想将我的 iphone 中的文本发送到 php 脚本,然后将其保存在 SQL 数据库中。

首先,特殊字符不起作用。一个 " 将是 &\quot; (没有 \ :O )等等。接下来,从 iphone 到 php 的表情符号更改为例如 ðŸ~。

这是我将文本发送到 php 的 iPhone 代码:

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

4 回答 4

5

当您将带有表情符号的数据字符串发送到您的 php 页面时,您必须使用以下编码:

NSData *data = [string dataUsingEncoding:NSNonLossyASCIIStringEncoding];

如果您必须发送此数据的字符串,您可以将其转换为字符串:

NSString str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

因此,您将有一个类似于\ucode的字符串,而不是微笑。

当您收到从数据库到应用程序的字符串时,您可以执行以下操作:

NSString str = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];

并且名声大噪。;)

于 2013-10-21T10:30:26.423 回答
0

关于表情符号:

表情符号的问题很可能来自编码差异(即,您的 php 页面显示的文本编码与 iphone 在发送文本时使用的文本编码不同)。

关于行情:

当您调用 时htmlentities(),您专门将具有 html 等效项的字符转换为该 html 等效项。这意味着"将转换为".

您可以使用该ENT_NOQUOTES标志使此函数不转换单引号和双引号:

$text = htmlentities(trim(stripinput($_POST['text'])), ENT_NOQUOTES);

请注意,如果引号会影响您在其他地方对文本所做的事情,这可能会很危险。如果引号改变了 html 的匹配方式,则输出到页面的字符串可能会出现奇怪的呈现,如果您没有正确考虑数据库相关代码中的引号,则数据库交互可能会受到影响。

于 2013-10-02T18:18:36.373 回答
0

我有一个类似的问题,我解决了 MSSQL 存储部分而不更改数据库,方法是使用以下方法存储文本的 base64 编码字符串:

+(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 字符。

于 2016-09-15T09:23:06.577 回答
-1

我终于解决了这个问题!但是现在有一个新问题..

我将数据库更改为 utf8mb4 并在连接到数据库后调用

mysql_query("SET NAMES 'utf8mb4'");

在数据库中,表情符号显示为

?

但在 ios 设备上它显示为表情符号。

现在的问题是如何显示“?” 从mysql数据库到我的网站?

于 2013-10-13T00:33:37.683 回答