【问题标题】:How to sanitize a stdClass in PHP如何在 PHP 中清理 stdClass
【发布时间】:2014-08-21 18:23:40
【问题描述】:

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

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

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

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

【问题讨论】:

  • 清理不是你可以像撒盐一样撒在一些数据上的东西。您为特定目的进行消毒。你的目标是什么? HTML? SQL? CSV?在一种情况下的危险字符在另一种情况下是完全良性的。
  • 我会将值存储在 mysql 数据库中,然后在 html 中呈现它们。

标签: php json sanitize


【解决方案1】:

对象可以被foreach迭代:

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

        sanitize($value);
    }

    return $data;
}

【讨论】:

    【解决方案2】:

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-18
      • 2019-04-21
      • 2013-10-23
      • 2014-01-22
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多