2010-04-14 15 views
1

我在後端使用jQuery/ajax和PHP發佈數據。問題在於,當我輸入'Jack &'時,Jill上了山,'我只在接到'後端'時才接收'Jack'。PHP - 發佈數據時'&'在數據中結束

在發送數據之前,我在前端發出了一個錯誤,提示「Jack & Jill上山」。

當我把die(print_r($_POST));在我的索引頁的最頂端,我只得到[key] => Jack

我怎麼能丟失數據?

我以爲這可能是我的過濾器;

<?php 

function filter($data) { 
    $data = trim(htmlentities(strip_tags(mb_convert_encoding($data, 'HTML-ENTITIES', "UTF-8")))); 
    if (get_magic_quotes_gpc()) { 
     $data = stripslashes($data); 
    } 
    //$data = mysql_real_escape_string($data); 
    return $data; 
} 

echo "<xmp>" . filter("you & me") . "</xmp>"; 

?> 

但是,在上述you & me測試這是在我的地方加入die(print_r($_POST));之後返回正常。

任何人都可以想到如何以及爲什麼發生這種情況?

任何幫助非常讚賞。

回答

2

你最有可能未能URL編碼數據。 &字符將提交的表單數據中的鍵值對分開。

使用encodeURIComponent這個

+0

謝謝你們,還在學習javascript/jquery,非常感謝 – 2010-04-14 06:25:34

0

二者必選其一編碼()或逃生()在JavaScript的結束

+0

escape()是url轉義特殊字符的正確函數 – Aurril 2010-04-14 06:20:02

+1

不,它不是。它對於非ASCII字符無法正常工作,並且已被棄用。 – Quentin 2010-04-14 06:28:28

1

POST數據是經由形式的HTTP標頭就像在URL中的GET數據發送。例如,數據可能看起來像var1=value1&var2=value2&var3=value3。正如你可以想象的,如果數據本身包含&符號,那麼這種格式不會工作得太好。確切地說,問題在於你如何提交數據。

要在發佈數據(或在URL中使用),必須使用「urlencoded」,這意味着您必須使用%26作爲&字符。所以,這不是真的你的PHP有問題,但無論發送數據。它沒有正確編碼值。

0

在Javascript結束您應該使用escape()

在PHP結束函數名爲urlencode()