如何在PHP中清理stdClass

时间:2014-08-21 18:23:40

标签: php json sanitize

我需要清理JSON文件中的值(例如,来自github的composer.json文件)。我json_decode($file)将其转换为stdClass个对象。 (我需要它作为一个对象,而不是一个数组 - 我知道这个选项。)

我需要递归地清理所有可能是对象的值(也可能是键?)。

我需要从文件中删除任何和所有“危险”字符等,但希望它保持多语言,因此计划使用filter_var($value, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW)

请提供建议和意见。也许我错过了明显的,但这似乎比它应该更难。

2 个答案:

答案 0 :(得分:0)

对象可以通过 foreach

进行迭代
function sanitize($data) {
    foreach ($data as &$value) {
        if (is_scalar($value)) {
            $value = sanitizeValue($value);
            continue;
        }

        sanitize($value);
    }

    return $data;
}

答案 1 :(得分:0)

Михаил-М的答案很接近。我需要稍微调整一下:

function sanitize($data) {
    foreach ($data as &$value) {
        if (is_scalar($value)) {
            $value = sanitizeValue($value);
            continue;
        }

        $value = sanitize($value);
    }

    return $data;
}

当然,这并没有解决我使用上面提到的filter_var方法实际清理数据的问题。所以我终于解决了这个问题:

function sanitize($data) {
    foreach ($data as &$value) {
        if (is_scalar($value)) {
            $value = filter_var($value, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
            continue;
        }

        $value = sanitize($value);
    }

    return $data;
}