2012-10-26 74 views
1

我正在使用一個PHP程序,該程序在多臺服務器上運行,並從兩臺服務器產生稍微不同的字符串。識別方法在字符串中添加其他字符(編碼/轉義)

**Server 1 Request Data:** 

a:10:{s:9:"locale";s:5:"en_US","url";s:18:"https://testingurl.com/index.php";} 

**Server 2 Request Data:** 

{"locale":"en_US","url":"https:\/\/testingurl.com\/index.php";} 

兩臺服務器都發送相同的變量,但格式略有不同。服務器1正在添加附加信息,例如:3:在請求之前,服務器2正在省略這些詳細信息,但轉義正斜槓。

問題: a:3:,s:9:是一種常見的編碼,還是服務器配置可能添加到請求中的東西?我對格式不熟悉,想知道它是否是常見的。我的目標是弄清楚是PHP程序添加了附加信息還是服務器配置。

回答

2

它容易

當前問題

這種序列化格式無效

a:10:{s:9:"locale";s:5:"en_US","url";s:18:"https://testingurl.com/index.php";} 
^^       ^
    2 6        32 

這是我認爲它應該像

$server1 = 'a:2:{s:6:"locale";s:5:"en_US";s:3:"url";s:32:"https://testingurl.com/index.php";}'; 
var_dump(unserialize($server1)); 

$server2 = '{"locale":"en_US","url":"https:\/\/testingurl.com\/index.php"}'; 
var_dump(json_decode($server2, true)); 

輸出

array 
    'locale' => string 'en_US' (length=5) 
    'url' => string 'https://testingurl.com/index.php' (length=32) 
+1

感謝這一切都有道理現在什麼數字顯示和爲什麼。 – JMC

1

的一個:10和S:9和相似的字符PHP序列化,而整個字符串看起來像是JSON編碼。這就是說,格式看起來(我假設你只是省略了一些輸出),但這裏是一個如何可能生成這樣一個例子:

$a=json_encode(array('locale'=>'en_US','url'=>'https://testingurl.com/index.php')); 
echo $a; 
echo "<br />"; 
echo serialize($a); 
+0

是的,這些字符串縮短了,謝謝 – JMC