Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 47 odgovora
  • 69.517 pregleda

Najnovija ↓

Re: Treba mi skripta ... Ako neko ima? 19.04.2015. u 17:34 · pre 140 meseci
izmenjeno 1 put, poslednji put plus_minus 19.04.2015. u 22:55
  1. plus_minus19.04.2015. u 22:55zapis iz teksta poruke
#41
I da stavimo tačku na ovaj mali doprinos .. » http://www.elitesecurity.org/p3563739

Ne znam jel' nekome potrebalo, jel' neko sam dodao sitnice koje su falile, kako god, evo završene varijante koja:

- neće da propusti dalje ukoliko ima teksta a taj tekst nije u sklopu validnih tagova koji smeju da se nađu unutar head taga ili je tekst mimo html komentara.
- neće da propusti dalje ukoliko nisu u pitanju samo dozvoljeni head tagovi te ako ima php ili xml tagova (u svim varijantama)
- neće da propusti dalje ukoliko su tagovi UPPERCASE (Mala slova i html5 bre. Ko još piše html tagove velikim slovima .. ? Mis'im ima.. ali.. whatever. To je mikrosekunda posla da se doda, al' ja to neću da radim)

ono što je izmenjeno/dodato:

Code (php):


<?php

// Deo pre prve petlje

     $details=preg_replace('/\s+/', ' ', $textarea);
     $details=str_replace('><','> <', $details);
     $details=str_replace('> </','></', $details);
     $details=str_replace('> <','>:*:<', $details);
     $details=(explode(':*:', $details));


// I mala izmena u prvoj petlji

     foreach($details as $i=>$line)
     {
          $checkLine=trim($details[$i]);

          if((strpos($checkLine, $allowedTags[0]) === false
          && substr_count($checkLine, '>') > 2)
          || substr($checkLine,0,1) !=='<'
          || substr($checkLine,-1) !== '>')
          {
               $HAAAALT = true;
               break;
          }
          else
          {
               $checkLine=str_replace('>',' ', $details[$i]);
               $checkLine=explode(' ', $checkLine);
               $checkLine=trim($checkLine[0]);
               $cl[]=$checkLine;
          }
     }

 


Sve ostalo je isto.

Evo i komplet metode u svom završnom izdanju:
(pozivanje i provera se vrši na isti način kao što je prehodno opisano)

Code (php):

<?php

// Sanitize allowed head tags for meta area before writing
protected function NotAllowedTagsForHead($textarea)
{
     // HTML tags
     $cl=array();
     $counter = array();
     $allowedTags = array (
          '<!--',
                '<title',
          '<style',
          '<base',
          '<link',
          '<meta',
          '<script',
          '<noscript',
     );

     $details=preg_replace('/\s+/', ' ', $textarea);
     $details=str_replace('><','> <', $details);
     $details=str_replace('> </','></', $details);
     $details=str_replace('> <','>:*:<', $details);
     $details=(explode(':*:', $details));

     if(count($details)>=1)
     {
          foreach($details as $i=>$line)
          {
               $checkLine=trim($details[$i]);

               if((strpos($checkLine, $allowedTags[0]) === false
               && substr_count($checkLine, '>') > 2)
               || substr($checkLine,0,1) !=='<'
               || substr($checkLine,-1) !== '>')
               {
                    $HAAAALT = true;
                    break;
               }
               else
               {
                    $checkLine=str_replace('>',' ', $details[$i]);
                    $checkLine=explode(' ', $checkLine);
                    $checkLine=trim($checkLine[0]);
                    $cl[]=$checkLine;
               }
          }


          unset($i, $line, $details, $checkLine);

          foreach($cl as $suspect):
               if(in_array($suspect, $allowedTags)):
               else: $HAAAALT = true; break; endif;
          endforeach;
          unset($cl, $suspect);
     }
     else unset($cl, $details);

     if(!isset($HAAAALT))
     {
          foreach($allowedTags as $value):
          if(strpos($textarea, $value) !== false):
               $counter[]=true; else: endif;
          unset($value);
          endforeach;
          unset($allowedTags);

          $HAAAALT=(
               (count($counter)<1 || empty($counter)) ?
               true:false
          );
     }

     // SS/xml tags piece start
     foreach( array (
          'fullphp' => '<?php',
          'shortphp' => '<?',
          'aspphp' => '<%',
          'shortecho' => '<?=',
          'endasp' => '%>',
          'endtag' => '?>'
     ) as $var=>$value):
          $$var=strpos($textarea, $value);
          unset($value, $var);
     endforeach;

     $serverSideSTOP=(
          in_array(true,
               array($fullphp, $shortphp, $aspphp, $shortecho, $endasp, $endtag)) ?
          true:false
     );

     // SS/xml tags piece end


     return ( (trim($textarea) !== '' && $HAAAALT || $serverSideSTOP ) ? true:false );
}

 
Potpis
about:networking
Re: Treba mi skripta ... Ako neko ima? 24.10.2015. u 17:21 · pre 134 meseca #42
Opet ja.

Razlog za `engrija` jeste - fleš. Doduše razlog je sledeći: ono, kada neko uzme pa nadžidža sedamnaest fleš embed/objekata na neku html stranicu, a inače nije vičan kodiranju, već se ta stranica našla na nekom blogspot domenu, a svaki od tih sedamnaest fleš objekata ima isti istovetan i nepravilan kod za povlačenje yt video klipova.. onda sledi jedan freeze. Pretraživač se zamrzne. Kada se desi takva situacija, korisnik ima opciju da ubije pretraživač, to jest proces (ako zna) ili da sačeka oko pola minuta da se sam ne odmrzne i da konačno dobije poruku tipa `Adobe flash plugin has crashed ...`. Ovo se ne dešava uvek, ali kad se desi, mene istrese iz cipela. Svi kao nešto gotive html5 video i kao hoće da se prebace komplet i ja sam jedan od njih, ali na našu žalost, html5 video još uvek nije standard i fleš plugin se za embed video klipova još uvek koristi. Ono što je najzanimljivije, koliko sam ja primetio, ove sa yt nešto baš i zabole za varijacije share/embedovanja, a ovi što i nisu vični kodiranju, nešto i ne umeju da se snađu ili imaju i dalje stari object/embed deo koda. Upravo zbog toga, nastaje kuršlus i adobe flashplugin - crash. Embed zeza.

Object tag kao standalone, ne.

Dakle, onome kome treba siguran način da provuče video klipove sa YT sajta ... i ne želi to kao iframe ... i ne želi da ispusti one korisnike kojima je jedina opcija da gledaju video online preko fleša, jer sistem koji koriste ne dozvoljava/nije sposoban i dovoljno jak za html5 video, te uz to hoće da budu sigurni da do crash-a neće doći..
a pri tom takođe želi da mu kod bude validan i za xhtml i za html..
.. testirano i radi (kad kažem testirano, ne mislim na IE8, IE7 i na ostatak žgadije) :

(Radi kao pesma čak i na ff preko linuxa. Ko nije upoznat, Linux je omražen od strane adobe-a, a firefox preko linuxa dobija samo critical bug-fix update za fleš plugin i to za `latest (ironija)` v 11.2)

funkcija:

Code (php):

<?php

function yt_flash_object($y, $h=bool, $wi=int, $he=int)
{    
     $x=null;
     $a=(($h) ? 'https': 'http');
     $a.=('://www.youtube.com/v/');
     $b='?fs=1&amp;hl=en_US&amp;rel=0';
     $d = ($a.$y.$b); unset($a, $b, $y, $h);

     $wi=((!$wi) ? '480':"$wi"); $he=((!$he) ? '320':"$he");
     $wh=("width:${wi}px; height:${he}px;");
     unset($wi, $he);

     foreach(array(
          'movie' => "$d",
          'wmode' => 'opaque',
          'quality' => 'high',
          'menu' => 'false',
          'allowfullscreen' => 'true',
          'allowscriptaccess' => 'always',
     ) as $n=>$v) $x.=(
          '<param name="'.$n.'" value="'.$v.'"> '
     ); unset($v, $n);
     $x=('<object type="application/x-shockwave-flash" '.
          'data="'.$d.'" style="'.$wh.'">'."${x}</object>"
     ); unset($d, $wh);
     return($x);
}
 


Koristi se izuzetno lako.

primer:

Code (html):

<!DOCTYPE html>
<html>
<head><meta charset=utf-8>
<title>YT flash embed</title>
</head>
<body>
<div class="neka-tamo-klasa">
     <?php echo yt_flash_object('cfIAqYhLSr0', true, false, false); ?>
</div>
</body>
</html>
 


Dakle, funkcija ima 4 parametra.

- Prvi parametar jeste sami unikatni yt video ID, string dakle. ( .../watch?v=cfIAqYhLSr0 )

- Drugi parametar jeste boolean vrednost. true / false. Ako je true to znači https zahtev. Ako je false, biće http zahtev, bez enkripcije i ovo koliko sam ja primetio, na false, neće da radi.
Dakle, true, jer ovi iz yt više ne podržavaju ne-enkriptovane http embed zahteve.

- Treći jeste width ili širina.
- četvrti jeste height ili visina.

Ako je treći parametar boolean false, podrazumeva se širina objekta od 480(px).
Za četvrti parametar važi isto, s' tim što je podrazumevana vrednost 320(px).

Primer ako želimo video prozorče od 640*480px:

Code (php):

<?php

# Funkcija dodaje `px` automatski.
echo yt_flash_object('cfIAqYhLSr0', true, '640', '480');

 


I to bi bilo to.
Potpis
about:networking
Re: Treba mi skripta ... Ako neko ima? 24.10.2015. u 17:45 · pre 134 meseca #43
Nisam naročito čitao temu, ali mi je zapao za oko tvoj post. Zašto raditi tako? Mislim da je bolja opcija da se od svakog klipa povuče njegova sličica (thumbnail) i tako prikaže korisniku, a kada želi da pogleda klip/video samo da mu apenduje (append) klip/video koji je želeo.
Potpis
https://www.youtube.com/watch?v=3ucPxwp0LOo
Re: Treba mi skripta ... Ako neko ima? 24.10.2015. u 18:12 · pre 134 meseca #44
Definiši append. U php-u, makar čistom, nema append, mada znam na šta misliš. ;)

Fora je u tome što ni ja ne bih tako delao, ako ima više od 2 video klipa.

Bio sam toliko iznerviran jer sam silom prilike završio na jednom blogspot linku koji je prouzrokovao browser - freeze i rešio da napišem post.
Eto, možda će baš taj `blogspotter` da proba ovako nešto (za njih i jeste napisana funkcija), tu gde nema thumbova, nego direkt - embed.

A i onda kada povuče prvo thumb, pa append, šta radi taj append?
Ako nije iframe, kakav je kod koji dopunjuje nodu?

Kako bi po tebi trebalo da izgleda?

Poenta priče je da bude što je više moguće cross-compatible, da uvek radi, da ne zamrzava pretraživač i da nije iframe.

Ono što se na ovaj moj način dobija u html-u jeste sledeće:

Code (html):

<object type="application/x-shockwave-flash" data="https://www.youtube.com/v/cfIA...amp;amp;hl=en_US&amp;rel=0" style="width:480px; height:320px;">
<param name="movie" value="https://www.youtube.com/v/cfIA...amp;amp;hl=en_US&amp;rel=0">
<param name="wmode" value="opaque">
<param name="quality" value="high">
<param name="menu" value="false">
<param name="allowfullscreen" value="true">
<param name="allowscriptaccess" value="always">
</object>
 
Potpis
about:networking
Re: Treba mi skripta ... Ako neko ima? 24.10.2015. u 18:46 · pre 134 meseca #45
Pod apend mislim jkveri (jquery) apend. Sve bih ja uradio kako si ti napisao, samo ne bi direktno kao objekat (object) prikazivao, vec bi stavio div sa sličicom (thumbnail) i nekim dugmetom (imitacijom yt dugmeta) koji bi radio onClick. Uglavnom, evo skripte kako bih to uradio:

Code:

(function ($) {
    var ytFunkcija= function () {
        var youTubeID = $(".youtube-player");
        youTubeID.each(function () {
            var This = $(this), ytID = This.data("id");
            This.html('<img class="youtube-thumb" src="https://img.youtube.com/vi/' + ytID + '/hqdefault.jpg"/><div class="play-button"></div>');
        });
        youTubeID.on("click", function (e) {
            e.preventDefault();
            var This = $(this),
                ytID = This.attr("data-id"),
                info = This.attr("data-info") || 0,
                rel = This.attr("data-rel") || 0,
                playlist = This.attr("data-playlist") || 0,
                jsapi = This.attr("data-enablejsapi") || 1,
                privacy = This.attr("data-privacy") || 1,
                autohide = This.attr("data-autohide") || 2,
                controls = This.attr("data-controls") || 0;
            if (privacy === 1)
                url = 'https://www.youtube-nocookie.com/embed/';
            else
                url = 'https://www.youtube.com/embed/';

            this.css("background", "#222").html('<iframe src="' + url + ytID + '?autoplay=1&autohide=' + autohide + '&border=0&wmode=opaque&enablejsapi=' + jsapi + '&controls=' + controls + '&showinfo=' + info + '&rel=' + rel + ((playlist !== 0) ? '&playlist=' + playlist : null) + '" frameborder="0"  allowfullscreen></iframe>');
        });
    };
    $(document).ready(function () {
        ytFunkcija();
    });

Potpis
https://www.youtube.com/watch?v=3ucPxwp0LOo
Re: Treba mi skripta ... Ako neko ima? 24.10.2015. u 18:54 · pre 134 meseca #46
To onda ne treba da ide u ovaj forum, nego u podforum javascript i ajax...
A ako ga prikazuješ kao objekat, xhtml strict/transitional html4/5 .. podržavaju. Object. Tag. :)
Dakle, svi i sve vrste i podvrste html doctype-a.
Neke (čini mi se xhtml strict) ne vare iframe ič.
ps: I jel' mora uvek i uvek - jquery? Umete li vi da živite bez jquery-a?

VanillaJS. Think about that.
Potpis
about:networking
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme