2013-03-08 55 views
-1

我正在尋找通過json對象並通過使用htmlspecialchars()函數將所有字符切換爲HTML安全字符的方法。在JSON對象中將所有字符更改爲ASCII

我想我可以循環並創建一個新的json對象與字符的變化,但我想一定有一個更優化的方式來做到這一點?

+0

JSON是一個字符串 - 一種使用JavaScript文字語法子集的序列化數據結構。你的意思是說,你有一個PHP Array,它是通過在數組的JSON序列化表示上運行'json_decode()'產生的? – JAAulde 2013-03-08 00:23:38

回答

2

根據建議,array_walk_recursive很可能是最好的選擇:

$array = json_decode($json, true); 
array_walk_recursive($array, function(&$value) { 
    $value = encoding_function($value); 
}); 
$json = json_encode($array); 

哪裏encoding_function是你的選擇來編碼值的功能;那可能是htmlspecialchars或其他。

或者,你可以換全亂作爲函數本身:

function json_walk_recursive($json, callable $function) { 
    $array = json_decode($json, true); 
    array_walk_recursive($array, function(&$value) use($function) { 
     $value = $function($value); 
    }); 
    return json_encode($array); 
} 

echo json_walk_recursive('{"foo":"bar","baz":{"qux":"zip"}}', function($value) { 
    return strtoupper($value); 
}); 

// {"foo":"BAR","baz":{"qux":"ZIP"}} 

這個例子可以在許多方面進行優化;例如通過$function直接到array_walk_recursive,但我只是擴大它的可讀性(我不知道,它對我來說似乎更清楚。它確實要求參數作爲參考,因此消費代碼不需要知道當前形式的細節;但我離題

此外,你會想錯誤恢復和其他這樣的必需品。

+0

做了類似於你的第二個建議,謝謝你! – David 2013-03-08 14:34:30