2011-04-22 61 views
1

我在提交發布數據時遇到問題。我有有一對夫婦的文本字段的形式,而當按下按鈕提交數據,它是通過從驗證(JS)的自定義運行,那麼我構建一個查詢字符串像POST數據問題

title=test&content=some content 

然後提交給服務器。我遇到的問題是當我有'&'(例如& nbsp)輸入到其中一個輸入,然後分解查詢字符串。例如:

title=test&content=some content &nbsp 

我該如何解決這個問題?

在此先感謝, 哈利。

+0

你爲什麼用JS填充查詢字符串?你發送一個Ajax請求或什麼?如果沒有,爲什麼不讓瀏覽器完成它的工作?請注意,JS可以由最終用戶禁用/欺騙,並且在這種情況下您希望驗證和表單也可以正常工作。 – BalusC 2011-04-22 17:11:47

+0

我正在發送一個AJAX請求。 – harrynorthover 2011-04-22 20:12:55

+0

可能值得看看jQuery然後:)用更少的代碼來做更多的事情。 – BalusC 2011-04-22 20:14:45

回答

2

運行encodeURIComponent在每個鍵和值。

var title = "test"; 
var content = "some content &nbsp "; 
var data = encodeURIComponent('title') + /* You don't actually need to encode this as it is a string that only contains safe characters, but you would if you weren't sure about the data */ 
      '=' + encodeURIComponent(title) + 
      '&' + encodeURIComponent('content') + 
      '=' + encodeURIComponent(content); 
+0

感謝隊友,工作的魅力:) – harrynorthover 2011-04-22 17:47:36

+0

@harrynorthover請確保你的答案標記爲接受,如果它爲你工作。 – Bozho 2011-04-22 17:49:19

0

對字符串進行編碼。當您想要用特殊字符對查詢字符串進行編碼時,您需要使用編碼。符號進行編碼這樣

title=test&content=some content %26 

基本上在查詢字符串的任何字符可以通過它的ASCII十六進制等效替換以%爲前綴

Space = %20 
A = %41 
B = %42 
C = %43 
... 
-1

這應該解決您的問題:

encodeURIComponent(name)+'='+encodeURIComponent(value)+'&'+encodeURIComponent(name2)+'='+encodeURIComponent(value2) 

你需要(如果你想在安全方面和名稱)連接起來將當你建立你的查詢之前逃離每個值。

  • JavaScript全局函數encodeURIComponent()會轉義。
  • 全局函數escape()(DOM)在瀏覽器中爲您完成。雖然人們說它並沒有爲unicode chars做好轉義。無論如何,如果你只關心「&」,那麼這將解決你的問題。
+0

不要使用'escape',它對於非ASCII字符是不安全的並且已被棄用。 – Quentin 2011-04-22 17:13:29

0

你說:

...當一個按鈕被按下提交數據,它通過自定義驗證(JS)運行,然後我構建查詢字符串...

在部分wh在建立查詢字符串之前,您還應按照David Dorward的建議,通過encodeURIComponent()運行每個輸入的值。

就像你這樣做 - 要小心的是,你只將新值賦給處理過的查詢字符串,而不是表單元素的值,否則你的用戶會認爲他們的輸入被破壞了,可能會被嚇倒。

[編輯]

我只是重讀你的問題,實現了一些重要的事情:你編碼& NBSP;性格。這可能是一個比這裏讀到的其他海報更復雜的問題。如果你想要那個字符,和其他的&代碼;輸入字符來轉移你需要認識到他們是代碼。那些字符&,n,b,s,p和;與「 」不是一樣的,它是一個不會中斷的空格字符。

您必須添加另一個編碼/解碼步驟。您可以在數據發送之前(或「發佈」)之前放置此步驟。

前: (Using this question's answers

var data = formElement.value; 
data = rhtmlspecialchars(data, 0); 

其目的是取代像& NBSP你的 「特」 字;與「 」,讓他們再適當地encodeURIComponent方法(數據)

或之後編碼: (使用標準的PHP函數)

<?PHP 
$your_field_name = htmlspecialchars_decode(urldecode($_POST['your_field_name'])); 
?> 

這是假設你有%26轉義在您的文章中& 如果你用encodeURIComponent()以外的函數替換它,你必須找到一種不同的方法來在PHP中解碼它。