2011-05-24 45 views
1

Hullo, 我会允许人们在我的应用程序中输入非拉丁字符的文本,例如西里尔文和类。不过,无论我做什么问号都会出现。 这是我对我的Objective-C程序代码:将UTF-8文本传递给php脚本

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]; 

我尝试使用UTF-8设置的URL请求两者,因为你可能会看到,和的NSLog下,现在评论作品。 NSLog报告我做了测试的正确的西里尔字符。

仍然当我在php脚本(insert.php)的开头打印消息字符串的值时,它会有问号。 如果我在PHP中手动编写西里尔文测试,它将被正确处理,甚至插入到数据库中。

协议中应该如何更改以使UTF-8字符正确通过?

感谢,法布里奇奥

回答

0

有在这里工作的许多组件:

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

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

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

其实我意识到问题可能在任何地方。出于这个原因,我在NSLog传递给NSURLRequest之前打印了该值,并且在php脚本的开始处再次显示了回显方向。正如所说的第一次印刷给西里尔字符,而回声问号。 – 2011-05-24 08:31:14

+0

正如我所说,这可能只是由于*浏览器*(或其他任何你输出它)只是显示他们错了。 * transport *中的编码不太可能,但最终的错误总是实际的*输出*。你排除了这种可能性吗? – deceze 2011-05-24 08:44:19

+0

是的,以防万一我在回声之前添加了标题方向,但是这是我在ReceivedData上得到的反馈:2011-05-24 10:49:46.561虚拟标记[10268:707]我开始解析:标题('Content-Type:text/html; charset = UTF-8')messaggio = ????зшззщ完成:俄语文本被手动输入到php脚本中,正如你所看到的,显示正确:这是生成输出的PHP片段:$ message = htmlentities($ _ SERVER ['HTTP_MESSAGE'],ENT_QUOTES,“UTF-8”); echo“header('Content-Type:text/html; charset = UTF-8')”; echo“messaggio =”。$ message; echo“зшззщ”; – 2011-05-24 08:52:07