2013-10-09 2 views
0

Я пытаюсь загрузить строку на сервер, но знак + в строке не сохраняется, а заменяется пробелом. Поэтому, если я отправляю ddd + fff как соль или iv, он сохраняется в базе данных sql как ddd fff. Почему знак + теряется?не удалось правильно загрузить строку на сервер

Благодаря

Загрузить код в приложение для Android:

parameters ="id="+mUsername+"&pass="+mPassword+"&operationtype="+moperationtype+"&salt="+Base64.encode Bytes(salt)+"&iv="+Base64.encodeBytes(iv); 

      try 
      { 
       url = new URL("http://www.xyz.com/connect.php"); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.setDoOutput(true); 
       connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
       connection.setRequestMethod("POST");  

       request = new OutputStreamWriter(connection.getOutputStream()); 
       request.write(parameters); 
       request.flush(); 
       request.close();    
       String line = "";    
       InputStreamReader isr = new InputStreamReader(connection.getInputStream()); 
       BufferedReader reader = new BufferedReader(isr); 
       StringBuilder sb = new StringBuilder(); 
       while ((line = reader.readLine()) != null) 
       { 
        sb.append(line + "\n"); 
       } 
       // Response from server after login process will be stored in response variable.     
       response = sb.toString(); 
       // You can perform UI operations here 
       Toast.makeText(this,"Message from Server: \n"+ response, 0).show(); 

       isr.close(); 
       reader.close(); 

      } 
      catch(Exception e) 
      { 

       // Error 
      } 

Код для connect.php является:

<?php 
$host="www.host.com"; // Host name 
$username="user"; // username 
$password="pass"; // password 
$db_name="db"; // Database name 
$tbl_name="table"; // Table name 
$usertable="table"; 

// Replace database connect functions depending on database you are using. 
mysql_connect($host, $username, $password) OR DIE ("Unable to 
     connect to database! Please try again later."); 

mysql_select_db("$db_name"); 

$operationtype="restore"; 
// username and password sent from form 
//NEVER Remove the mysql_real_escape_string. Else there could be an Sql-Injection! 
$myusername=mysql_real_escape_string($_POST['id']); 
$mypassword=mysql_real_escape_string($_POST['pass']); 
$salt=($_POST['salt']); 
$iv=($_POST['iv']); 
$operationtype=mysql_real_escape_string($_POST['operationtype']); 


$sql ="INSERT INTO `db`.`table` (`row`, `id`, `pass`,`salt`, `iv`) VALUES (NULL, '$myusername', '$mypassword','$salt','$iv');"; 

$result=mysql_query($sql); 


?> 
+0

encodeURI чувак! – Nezam

ответ

0

Используйте URLEncoder для URL, так что все персонажи получают закодированный правильный путь. Невозможно написать определенные символы, такие как «+ $ §» в URL-адресе. И использовать decode в вашем PHP

URL Спецификация:

Reserved 
Have to be encoded sometimes 
! * ' () ; : @ & = + $ ,/? % # [ ] 
+1

@ A.S.decoding не требуется на стороне сервера. Поскольку он использует 'Content-Type: application/x-www-form-urlencoded' php, должен обрабатывать декодирование внутри предопределенной переменной $ _POST. – linakis

+0

О, спасибо за это! –

0

вы должны использовать %2B в ГЭТ для PHP т.е.

example.com?q=string%2Bblah 

эк

string+blah 
Смежные вопросы