将UTF-8文本传递给php脚本
问题描述:
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字符正确通过?
感谢,法布里奇奥
答
有在这里工作的许多组件:
- 文本输入
- 应用程序内部处理
- 运输通过HTTP
- 输出到浏览器
- 浏览器显示字符
如果在输入文本时使用UTF-8编码文本,并且步骤2-4中没有任何步骤会以任何方式更改原始字符串,则应始终处理Unicode。问题是可能您的浏览器不知道这一点,并试图将文本解释为别的东西。通过设置适当的标题告诉浏览器它正在处理UTF-8文本:
header('Content-Type: text/html; charset=UTF-8');
其实我意识到问题可能在任何地方。出于这个原因,我在NSLog传递给NSURLRequest之前打印了该值,并且在php脚本的开始处再次显示了回显方向。正如所说的第一次印刷给西里尔字符,而回声问号。 – 2011-05-24 08:31:14
正如我所说,这可能只是由于*浏览器*(或其他任何你输出它)只是显示他们错了。 * transport *中的编码不太可能,但最终的错误总是实际的*输出*。你排除了这种可能性吗? – deceze 2011-05-24 08:44:19
是的,以防万一我在回声之前添加了标题方向,但是这是我在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