2010-04-12 64 views
1

這是我想做的事:PHP數組從JSON

我有一些JSON這樣

var foo = { 
    format:"json", 
    type:"test", 
    id:"26443" 
    }; 

,我awant把那個URL中這樣

'http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:4:"test";s:2:"id";s:5:"26443";}' 

然後我將會進入ajax調用,但是我所嘗試的所有結果都會出現錯誤501錯誤URI有人會告訴我如何執行此操作

我已經試過這 編輯:

再次尋找和提醒這一功能,是構建結果correcty他們只是arrn't或者通過AJAX或瀏覽器中使用propler後的結果

function js_array_to_php_array(a) { 
    var a_php = ""; 
    var total = 3; 

    for (var key in a){ 
    total; 
    a_php = a_php + "s:" + String(key).length + ":\"" + String(key) + "\";s:" + String(a[key]).length + ":\"" + String(a[key]) + "\";"; 
    } 
    a_php = "a:" + total +":{" + a_php + "}"; 
    return a_php; 
} 

當我使用HTTP狐狸它把它恢復

http://example.com/a:3:%7Bs:6:%22format%22;s:4:%22json%22;s:4:%22type%22;s:4:%test%22;s:2:%22id%22;s:5:%2226443%22;} 

,我覺得奇怪,因爲它ecodes一切,但最後花括號

+0

我與像'/一個網址,過去遇到了麻煩:'在Windows計算機上運行的Apache。經過一番研究,似乎這是由於舊的目錄遍歷攻擊 - apache懷疑該URL代表試圖直接訪問A:驅動器。 – 2010-04-12 15:07:27

+0

@frank多數民衆贊成在有趣的,但我不認爲多數民衆贊成的問題,我把我的瀏覽器中顯示的網址,它的工作原理,因爲我期望我似乎無法正確生成的網址 – mcgrailm 2010-04-12 15:10:29

回答

1

因此,事實證明沒有什麼錯誤的功能js_array_to_php_array它完全按照我需要它的問題是我需要使用JSONP而不是JSON時運行我的ajax調用,因爲我正在跨域也是解釋了爲什麼代碼在URL工作,但不是我的AJAX跑

謝謝大家的幫助

2

爲什麼不直接使用一個「正常」的查詢字符串?

http://example.com/?type=test&id=26443 

$type = $_GET['type']; 
$id = $_GET['id']; 

除非我失去了一些東西?

+0

,因爲這是什麼網址預計看到 – mcgrailm 2010-04-12 14:45:11

2

有這個已經是一個jQuery的功能!使用它並且喜歡它。

http://api.jquery.com/jQuery.param/

+0

它看起來並不像我想要的那樣,我可以不斷地在字符串 – mcgrailm 2010-04-12 15:07:43

0
http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:5:"test";s:2:"id";s:5:"26443";} 

501是正確的 - 這不是一個有效的URL。 URL絕對不能在其中引號,或者(大部分)大括號。

如果你真的要在URL提交PHP字面結構沒有做它作爲常規集合的查詢參數,你就必須進行URL編碼無效字符,你可以這樣做:

url= 'http://example.com/'+encodeURI(js_array_to_php_array(foo)); 

導致:

http://example.com/a:3:%7Bs:6:%22format%22;s:4:%22json%22;s:4:%22type%22;s:5:%22test%22;s:2:%22id%22;s:5:%2226443%22;%7D 

順便此:

String(key) 

是superf luous:JS中的對象鍵總是字符串,即使你把它們放在數字中;

"\"" + String(a[key]) + "\"" 

是要出問題如果該值可包含引號和反斜線,

total; 

應該肯定是一個增量在這裏?

0

在PHP端,您可以使用urlencode(json_encode($obj))將對象轉換爲可在URL中使用的字符串。

當我發佈了這個之後,我意識到你在嘗試將JavaScript變量轉換爲URL字符串後,我看到var foo = {。咄。

+0

中得到「php」這個詞。我需要在JavaScript/jQuery的PHP數組放在URL中 – mcgrailm 2010-04-12 15:46:26