2015-03-02 67 views
0

我想準備要發送的數據在一個寧靜的服務器JSON,所以我需要準備數據,以便所有日期轉換爲unix時間戳和所有numric值不會被雙引號包圍。PHP的preg_replace MySQL的日期時間或時間或日期JSON字符串向timestamp

我現在的嘗試是

$j = json_encode($data); //json_encode($data,JSON_NUMERIC_CHECK); 
$j = preg_replace('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/e', "strtotime('$1')", $j);//timedate 
$j = preg_replace('/(\d{4}-\d{2}-\d{2})/e', "strtotime('$1')", $j);//dates 
$j = preg_replace('/(\d{2}:\d{2}:\d{2})/e', "strtotime('$1')", $j);//time 
$j = preg_replace('/\"([0-9]+)\",/', "$1,",$j);//remove double quotes from around int values 

echo $j; 

,但我有點擔心這可能會適得其反(錯誤),被認爲是安全的這種普遍的做法?有沒有更好/更快的方法來做到這一點?

+0

'/ e'已被棄用,請改爲使用preg_replace_callback。 – Toto 2015-03-02 13:10:41

回答

0

不好。 /e修飾符是

BAD !!!!!

相反,試試這個:

$j = preg_replace_callback(
    '/"(\d{4}-\d-\d \d\d:\d\d:\d\d)"/', 
    function($m) {return strtotime($m[1]);}, 
    $j 
); 

它使用動態基於回調的正則表達式替換正確的方法,並凝結您步入一個。

0

那麼你可以進行編碼以JSON,避免了正則表達式的開銷,並捕捉看起來像日期,但不是字符串之前修改它。

遞歸就遍歷數據結構,並將其轉換爲一個時間戳東西,這是一個DateTime對象等。然後將其編碼爲JSON。

至於數字,將它們轉換爲整數或浮點數。