@Vadim-55

Отфильтровать json PHP?

Есть json
$arr = '{
   "array_1":{
      "key_1":"value",
      "key_2":"value",
      "key_3":"value",
      "key_4":"value",
      "array":{
         "key_1":"value",
         "key_2":"value",
         "key_3":"value",
         "key_4":"value"
      },
      "key_5":"value",
      "key_6":"value",
      "key_7":"value",
      "key_8":"value"
   },
   "array_2":{
      "key_1":"value",
      "key_2":"value",
      "key_3":"value",
      "key_4":"value",
      "key_5":"value",
      "array":{
         "key_1":"value",
         "key_2":"value",
         "key_3":"value",
         "key_4":"value"
      },
      "key_6":"value",
      "key_7":"value"
   },
 "array_3":{
 	...
   },
... etc

}
';


array_1, array_2, etc может быть разной длины, в нем встречается некий array

суть: надо развернуть массив, пройтись по всем ключам и значениям и применить функцию простейшей фильтрации filterData() и свернуть обратно т.е. тупо отфильтровать и вернуть что было. далее это запишется в БД

function filterData($data){
	$data = trim($data);
	$data = strip_tags($data);
	$data = htmlspecialchars($data);
	return $data;
}
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
@Vadim-55 Автор вопроса
победил )
вот, вдруг пригодится. фильтрует многомерный массив и возвращает его. так же можно просто строки фильтровать.

function filterData( $data ) {

	$data = trim( $data );
	$data = strip_tags( $data );
	$data = htmlspecialchars( $data );
	// $data = mysql_escape_string( $data );
	// $data = mysql_real_escape_string( $data );
	return $data;

}

function filterDataXSS( $in ) {

	if( is_array( $in )) {

		$result = [];
		
		foreach ( $in as $key => $value ) {
		
			$key = filterData( $key );
			$result[ $key ] = filterDataXSS( $value );
		
		}
		
		return $result;
	
	}

	return filterData( $in );

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Заходишь в массив, берешь елемент, если это не массив, фильтруешь, иначе отправляешь этот массив рекурсией в эту же функцию.
Ответ написан
@dev400
function filterData(Array $in) {

            foreach ($in as $key => $value) {

                if (is_array($value)) {

                    filterData($in[$key]);

                } else {

                    $value = trim($value);
                    $value = strip_tags($value);
                    $value = htmlspecialchars($value);

                    $in[$key] = $value;

                }
            }
        return $in;
    }

$cleanArray = filterData( json_decode($arr, true) );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы