我在提交發布數據時遇到問題。我有有一對夫婦的文本字段的形式,而當按下按鈕提交數據,它是通過從驗證(JS)的自定義運行,那麼我構建一個查詢字符串像POST數據問題
title=test&content=some content
然後提交給服務器。我遇到的問題是當我有'&'(例如& nbsp)輸入到其中一個輸入,然後分解查詢字符串。例如:
title=test&content=some content  
我該如何解決這個問題?
在此先感謝, 哈利。
我在提交發布數據時遇到問題。我有有一對夫婦的文本字段的形式,而當按下按鈕提交數據,它是通過從驗證(JS)的自定義運行,那麼我構建一個查詢字符串像POST數據問題
title=test&content=some content
然後提交給服務器。我遇到的問題是當我有'&'(例如& nbsp)輸入到其中一個輸入,然後分解查詢字符串。例如:
title=test&content=some content  
我該如何解決這個問題?
在此先感謝, 哈利。
運行encodeURIComponent在每個鍵和值。
var title = "test";
var content = "some content   ";
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);
感謝隊友,工作的魅力:) – harrynorthover 2011-04-22 17:47:36
@harrynorthover請確保你的答案標記爲接受,如果它爲你工作。 – Bozho 2011-04-22 17:49:19
對字符串進行編碼。當您想要用特殊字符對查詢字符串進行編碼時,您需要使用編碼。符號進行編碼這樣
title=test&content=some content %26
基本上在查詢字符串的任何字符可以通過它的ASCII十六進制等效替換以%爲前綴
Space = %20
A = %41
B = %42
C = %43
...
這應該解決您的問題:
encodeURIComponent(name)+'='+encodeURIComponent(value)+'&'+encodeURIComponent(name2)+'='+encodeURIComponent(value2)
你需要(如果你想在安全方面和名稱)連接起來將當你建立你的查詢之前逃離每個值。
不要使用'escape',它對於非ASCII字符是不安全的並且已被棄用。 – Quentin 2011-04-22 17:13:29
您需要對您的查詢進行編碼以使其具有URL安全性。你可以參考如何做到這一點的JS以下鏈接:
http://xkr.us/articles/javascript/encode-compare/
http://www.webtoolkit.info/javascript-url-decode-encode.html
感謝您的鏈接,encodeURIComponent完美工作。 – harrynorthover 2011-04-22 17:47:56
你說:
...當一個按鈕被按下提交數據,它通過自定義驗證(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中解碼它。
你爲什麼用JS填充查詢字符串?你發送一個Ajax請求或什麼?如果沒有,爲什麼不讓瀏覽器完成它的工作?請注意,JS可以由最終用戶禁用/欺騙,並且在這種情況下您希望驗證和表單也可以正常工作。 – BalusC 2011-04-22 17:11:47
我正在發送一個AJAX請求。 – harrynorthover 2011-04-22 20:12:55
可能值得看看jQuery然後:)用更少的代碼來做更多的事情。 – BalusC 2011-04-22 20:14:45