-1

我正在寻找一种方法来遍历 json 对象并将所有字符切换为 HTML 安全字符,htmlspecialchars()例如使用该函数。

我想我可以循环并创建一个新的 json 对象并更改字符,但我认为必须有更优化的方法来做到这一点?

4

1 回答 1

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传递_ _当前形式;但我离题了

此外,您还需要错误恢复和其他此类必需品。

于 2013-03-08T00:34:24.773 回答