2011-08-02 59 views
1

一個畸形的JSON我有我想它json_decode();功能如何解決在PHP

{"phase":2,"id":"pagelet_profile_picture","css":["VCxcl","Ix2pq"],"js":["fZYUE","VfnZ3"],"content":{"pagelet_profile_picture":"\u003cdiv class=\"profile-picture\">\u003cspan class=\"profile-picture-overlay\">\u003c\/span>\u003cimg class=\"photo img\" src\=\"http:\/\/profile.ak.fbcdn.net\/hprofile-ak-snc4\/222_111_2222_n.jpg\" alt=\"bla bla\" id=\"profile_pic\" \/>\u003c\/div>"}} 

解碼存在json_last_error();但它沒有幫助我這個JSON字符串。 (有時得到JSON_ERROR_STATE_MISMATCH和JSON_ERROR_SYNTAX)

我想知道這個JSON字符串有什麼問題,以及我如何在PHP中自動修復它,以便我可以解碼它。 一些代碼將是非常有益 感謝。

+0

你的意思是你想* *解碼字符串? – Ben

+0

嗯...你** **有一個JSON字符串,你想** **編碼作爲JSON?編碼意味着將對象或數組轉換爲JSON。你不能以一個字符串開頭,如果你已經有了一個JSON字符串,那麼你可能並不是真的想要。 – Quentin

+0

對不起,我的意思是json_decode – Ben

回答

2

使用JSON皮棉,看來問題是在src \ =

的\逃逸等號(=),這是沒有意義的。

如果更換的src \ =與SRC =它通過驗證。

的修復:

  1. 修正,其生成在所述第一位置的JSON字符串的代碼。

  1. 使用str_replace改變 'SRC \ =' 到 'SRC ='
1

有錯誤的編碼的問題是,它只是一個錯誤的編碼。事情然後破裂。

如果問題作爲本在他的回答中指出無效轉義序列有關,你可以嘗試修復這些序列輸入字符串,可能與一個更聰明的算法,在尋找替代它任何的不需要的轉義序列通過去除轉義字符\,它具有非轉義值。

您可以通過創建需要實際轉義的字符列表來實現,然後解析轉義字符的整個字符串(如果找到),檢查下一個字符是否需要轉義,然後採取行動。

然而,這只是一個戰略,作爲輸入不正確編碼,這並不容易,只是解決的事情,因爲他們已經被打破。