2011-05-24 47 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