目标c-将UTF-8文本传递给php脚本


objective c - Passing UTF-8 text to php script

Hullo,我允许人们在我的应用程序中输入非拉丁字符的文本,比如西里尔字母之类的。尽管如此,无论我做什么,问号都会出现。这是我在objective-c程序上的代码:

    NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/iPhone/php/insert.php?recipientEmail=%@&passwd=%@&email=%@&personalPasswd=%@&private=%d&latitude=%f&longitude=%f&altitude=%f&horizontal=%f&vertical=%f&disclosedEmail=%d", appDelegate.actualHttpHeader, myRecipient, myKey, email, passwd, myPrivate?1:0, myLatitude, myLongitude, myAltitude, myHeading, myTilting, mySigning?1:0]]
                                                            cachePolicy:NSURLRequestUseProtocolCachePolicy                                                          timeoutInterval:60.0];
    //NSLog(@"message is:%@",myMessage);
    //myMessage = [myMessage stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"in graffitiSubm message=%@", myMessage);
    [theRequest addValue:myMessage forHTTPHeaderField:@"message"];
    [theRequest addValue:street forHTTPHeaderField:@"street"];
    [theRequest addValue:city forHTTPHeaderField:@"city"];
    [theRequest addValue:country forHTTPHeaderField:@"country"];
    [theRequest setValue: @"text/xml;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

正如您所看到的,我尝试在URL请求中使用UTF-8设置,并在NSLog下使用现在已注释的部分。NSLog报告了我进行测试时使用的正确cyrillic字符。

尽管如此,当我在php脚本(insert.php)的开头打印Message字符串的值时,它还是带有问号。如果我在php中手动编写cyrillic测试,它将被正确处理,甚至被插入到DB中。

我应该在协议中更改什么以使UTF-8字符正确通过?

谢谢,Fabrizio

这里有许多组件在工作:

  1. 文本输入
  2. 应用程序内部处理
  3. HTTP传输
  4. 输出到浏览器
  5. 浏览器显示字符

如果文本在输入时是用UTF-8编码的,并且步骤2-4都没有以任何方式更改原始字符串,那么您应该始终使用Unicode。问题是很可能您的浏览器不知道这一点,并试图将文本解释为其他内容。通过设置适当的标题告诉浏览器它正在处理UTF-8文本:

header('Content-Type: text/html; charset=UTF-8');