1. PHP / Говнокод #23467

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    function string_cleaner($data, array $opts) //1: Массив или строка, 2: Только массив
    	{
    		
    		if (empty($opts))
    		{
    			$opts['null_byte'] = TRUE;
    		}
    		
    		$null_byte = ($opts['null_byte'] == 'off')
    			? FALSE
    			: TRUE;
    		
    		$opts_allowed = ['trim', 'htmlspecialchars', 'strip_tags', 'addslashes', 'htmlentities'];
    		
    		$opts = array_intersect_key($opts, array_flip($opts_allowed));
    		
    		if(is_array($data))
    		{
    			foreach($data as $key => &$value)
    			{
    				if(is_array($value))
    				{
    					string_cleaner($value, $opts);
    				}
    				
    				if ($null_byte)
    				{
    					$value = str_replace(chr(0), '', $value);
    				}
    				
    				if(is_array($opts))
    				{
    					foreach($opts as $clear_func => $clear_func_params)
    					{
    						$value = (!$clear_func_params) ? $clear_func($value) : $clear_func($value, $clear_func_params);
    					}
    				}
    			}
    		}
    		else
    		{
    			if ($null_byte)
    			{
    				$data = str_replace(chr(0), '', $data);
    			}
    			
    			if(is_array($opts))
    			{
    				foreach($opts as $clear_func => $clear_func_params)
    				{
    					$data = $value = (!$clear_func_params) ? $clear_func($data) : $clear_func($data, $clear_func_params);
    				}
    			}
    		}
    		
    		return $data;
    		
    	}
    
    {...}
    
    	$server['get'] = string_cleaner($_GET, ['trim'=>' ', 'htmlentities'=>'', 'strip_tags'=>'', 'addslashes'=>'']);

    Для сука ленивых

    Запостил: Intention, 30 Октября 2017

    Комментарии (30) RSS

    • Ого, не знал, что у строки есть оператор (), который эвалит функцию по имени.
      Ответить
      • http://govnokod.ru/17415
        Ответить
      • habrahabr.ru/post/259991/
        Ответить
        • >Готовимся к собеседованию по PHP
          это еще зачем??
          Ответить
          • Придти на собес, дать всем понять, что ты разбираешься в php лучше собеседующих, а потом спросить, как они вообще на этом говне пишут.
            Ответить
            • На чем скриптят в Я и G, кстати? на Питоне?
              Или после Go теперь в G вовсе не скриптят?
              Ответить
              • посмотри на чём написан основной api tensorflow
                в Я примерно тоже самое, за исключением фронтенда
                Ответить
                • из всего стабилити термин "скриптят" подходит только к питончику, стало быть я угадал (на самом деле я знал про питонистов в Я)

                  >>For example, see the bindings for: C#, Haskell, Julia, Ruby, Rust, and Scala.
                  ахахаха, пыха даже тут нету.

                  Фронт-то на JS преимущественно, это понятно...
                  Ответить
                • В яндексе и перла хватает вроде.
                  Ответить
                  • Да, но в старых сервисах. В каком-нибудь 1999-м году выбор языка скриптования был довольно очевиден.

                    Всмысли новые сервисы они на нем не пишут, насколько мне известно
                    Ответить
                  • когда я уходил, они как раз обсуждали, на чём переписывать здоровенный перловый сервис
                    Ответить
              • Любителям пистона и ML рекомендую также посмотреть
                https://colab.research.google.com/
                Ответить
      • Можно ещё использовать строку как имя переменной.
        $a = 1;
        $b = 'a';
        echo $$b;

        МЕТУШНЯ!
        Ответить
        • <?php
          
          $thud = 'Hello, world!';
          
          $a = array('foo', 'bar', 'baz', 'qux', 
                     'quux', 'corge', 'grault', 'garply',
                     'waldo', 'fred', 'plugh', 'xyzzy', 
                     'a' => 'thud');
          $b = 'a';
          $c = 'b';
          $d = $$$c;
          
          echo $$d[$$c];
          Ответить
          • P.S. В PHP 7 сменили приоритет. $$d работает не так, как в PHP 5.x.
            Быстрофикс для PHP 7:
            https://ideone.com/Y5vifr
            Ответить
            • > В PHP 7 сменили приоритет

              Это офигенно. Лет пятнадцать копились вопросы: почему из версии в версии в версию приоритет тернарного оператора такой ебанутый; почему оператор сравнения == не транзитивен, любая непустая строка == 0 и == TRUE, но 0 == FALSE; почему куча стандартных функций, от которых в качестве результата мы ожидаем массив, вместо пустого массива возвращают false, который вроде бы == [], но при передаче в foreach дает ворнинг, и приходится городить проверки...

              И всегда было оправдание: подумайте сами, сколько кода работает по старым соглашениям, нам нужна обратная совместимость, бла бла бла.

              И вот они сменили приоритет, и где? В возможности использовать строку как имя переменной. Это вообще здоровые люди?
              Ответить
    • # $opts['null_byte'] = TRUE;
      # $opts['null_byte'] == 'off'

      Заставь дурака богу молиться, он и лоб расшибёт.
      Ответить
      • Это врядли в коде с логикой писалось. Скорее всего конфиг какой-то.
        Ответить

    Добавить комментарий