2017-01-04 71 views
0

我一直在使用超薄框架3,並返回在JSON響應這樣寫的REST API發送的JSON對象XML字符串,使用PHP苗條

return $response->withHeader(
     'Content-type', 
     'application/json; charset=utf-8' 
    )->withJson($data, 200); 

這是工作的罰款。

$xml = '<?xml version="1.0" encoding="UTF-8"?><dialog createdBy=""createDate=""><dialog>' // looks like this 

$data = [ 
    'name' => 'xmlName', 
    'xml' => $xml // fetching from db 
] 

現在,我已經存儲在數據庫中的XML字符串,並希望將其發送給客戶端,我必須到XML字符串保存爲另一個數據庫,因爲它是。

但是,當我編碼XML字符串,我的JSON得到休息。

我也試過像,

json_encode($data, JSON_HEX_TAG); 

其中我的XML轉換爲。

"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?\u003E\n\u003Cdialog createdBy=\"\" 

我該如何正確編碼JSON中的xml,然後取回原來的xml字符串,因爲它是?

您的反饋非常感謝。

回答

0

如果你看看withJson()源代碼,你會發現它所處理的所有數據都是用json_encode()來處理的 - 在Slim方面沒什麼特別的。實際上,你的XML就好了\u003C\u003E<>的實體。請記住,JSON是計算機的數據格式,不是人!

此外,JSON spec指出您需要具有頂級對象或數組。所以你不能只發送一個字符串回客戶端,並期望它被處理爲JSON,因爲它不會是JSON。如果json_encode()不只是崩潰,那是因爲它被設計爲對部分JSON進行編碼,因爲它有時候是一個有用的功能。你絕對需要設計一個有效的JSON結構,例如:

->withJson(array($xml), 200) 
+0

其實我正在編碼一個數組,xml字符串存在於該數組中。 –

+0

然後你就完成了:) –

0

其實我剛剛發現我的答案通過ヶ輛的暗示@阿爾瓦羅·岡薩雷斯放棄。 我只是將我的XML字符串一樣,

[ 
    'name' => 'xmlName', 
    'xml' => htmlentities($xml) 
] 

我能夠接受XML字符串,因爲它是沒有任何的JSON休息。

+0

'htmlentities()'只會破壞你的XML(或者至少迫使接收端撤消編碼)。你爲什麼認爲你需要它? –

+0

其工作正常,我認爲,如果我通過$ xml,因爲它是我的json得到休息。這就是我使用htmlentities()的原因。所以我的JSON沒有休息,我不必撤消它。我收到了完全相同的字符串。 –

+0

你必須做一些你還沒有說過的東西(比如在瀏覽器中顯示XML或者用一些庫處理數據)。本網站旨在成爲一個集體知識庫,無論誰在這裏谷歌將會產生錯誤的印象,「json_encode()」被破壞或不完整,當然不是這種情況。 –