2010-10-08 22 views
1

正在用PHP試驗一些基本的http後的東西,並遇到這個問題。php編碼後的參數值

1.PHP:

<head> 
    <script src="/scripts/jquery.js"></script> 
</head> 
<body> 

    <script> 
     function hw(){ 
      $.ajax({ 
       type: 'POST', 
       url: '/2.php', 
       data: 'param=a+b+c', 
       success: function(d){ 
       console.log('server said ' + d); 
       } 
      }); 

     } 
    </script> 
    <button onclick="javascript:hw();">CLick me</button> 
</body> 

2.PHP:

<?php 
echo $_POST['param']; 
?> 

的AJAX調用返回與 'A B C' 而不是 'A + B + C'。爲什麼'+'被編碼爲''(空格)?

然後,我嘗試使用POST請求的內容類型作爲'text/plain'而不是默認'application/x-www-form-urlencoded'。在這種情況下,$_POST['param']出來是空的?我想了解這兩種情況究竟發生了什麼。我在服務器端做什麼來取回原始數據('+')?

回答

3

使用 data: {param: 'a+b+c'}

+1

由於他使用jQuery,這是最簡單和最乾淨的解決方案! +1! – jwueller 2010-10-08 12:10:29

+0

這是爲什麼這樣工作? jquery內部使用encodeURIComponent? – letronje 2010-10-08 18:50:53

+0

@letronje我檢查jquery的源,並且發現:S [s.length] = encodeURIComponent方法(鍵)+ 「=」 + encodeURIComponent方法(值); – barbushin 2010-10-08 19:16:35

5

內容類型無關與含有+ URL查詢因爲該符號是URL編碼等效作爲庫無關的替代根據RFC 1738使用%2B的空間的。

+0

我該怎麼做在服務器端找回原始數據(「+」)? – letronje 2010-10-08 07:04:15

+3

urldecode()或rawurldecode() – stillstanding 2010-10-08 07:07:22

+0

@letronje:您應該使用JavaScript編碼您的數據以防止出現這些問題。 jQuery可以爲你處理這個問題。 SeniorDev發佈瞭如何做到這一點。在服務器端解碼不需要,因爲PHP爲你處理這個問題。 – jwueller 2010-10-08 12:13:14

5

使用

data: 'param='+encodeURIComponent('a+b+c') 

代替華氏度

data: 'param=a+b+c' 

,你將能夠正常使用數據,而無需解碼。