2013-12-08 173 views
1

我使用此方法發送post請求到我的服務器並將數據保存到sql數據庫 但我有一個問題,我錯過了一些字符時,數據保存到數據庫 例如我有這個字符串「例如交++請求++」 通過缺失+加號收到數據庫字符串修改 「例如POST請求」 當 這裏是我的代碼發送http發佈請求時發生錯誤

的Xcode

NSString *STR = @"mystring=example post ++ request ++"; 
NSData *PostData = [STR dataUsingEncoding:NSUTF8StringEncoding]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://MySiteUrl.com/example.php"]]; 

    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:PostData]; 
    [request setHTTPMethod:@"POST"]; 

    NSError *error = nil; 
    NSURLResponse *response = nil; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

PHP代碼

$STR = $_POST['mystring']; 

      header ('Content-Type: text/html; charset=UTF-8'); 
$con = mysql_connect("localhost","xxxxxx","xxxx"); 
      mysql_select_db("xxxxxxx", $con); 
      mysql_query("SET NAMES utf8"); 

$STR = trim($STR); 

mysql_query("INSERT INTO `xxxxxxx`.`table` (`id`, `mystring`) VALUES (NULL, '$STR');"); 
+1

**警告:**您正在使用[a **棄用的**數據庫API](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql -phunctions-in-php)並且應該使用[現代替換](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com)**,現代的API會更容易[防守](http://stackoverflow.com/questions/60174/)我怎麼可以防止SQL注入在PHP)自己從。 –

回答

1

請記住+,在一個URL中,意味着一個空格。如果你想傳遞一個+符號,那麼你必須對它進行編碼,我認爲你的xcode是通過UTF8格式來完成的。在POST中,請求參數作爲請求正文中的查詢字符串。因此,調試您的PHP代碼,並確保一旦您的PHP收到該數據,然後仍然保持UTF8。如果不是,那麼只需在php中使用urlencode(string $ str)將其轉換。我認爲你的問題是編碼,你需要調試你的代碼,以確定哪個部分沒有正確編碼。好問題和好運