Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 15 Ιούλ 2014 17:50

Έχω μια μεταβλητή $met1 η οποία περιέχει κείμενο.

Μέσα στο κείμενο αυτό κάπου υπάρχει και ένα pattern το οποίο αντιστοιχεί σε ένα video στο youtube. Το pattern αυτό έχει τη μορφή
{youtube}uqfYNxP7GzM{/youtube}
μέσα όπως βλέπετε είναι ο μοναδικός κωδικός του εκάστοτε βίντεο όπως μπορείτε να δείτε ο οποίος όπως θα ξέρετε είναι για κάθε βίντεο άλλος.

Θέλω λοιπόν να κάνω αυτό το pattern κάθε φορά ένα βίντεο σε iframe το οποίο να παίζει.
Δηλαδή σε iframe εννοώ έτσι :

Κώδικας: Επιλογή όλων

<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/uqfYNxP7GzM'>
.

Όπως μπορείτε να δείτε χρησιμοποιώ τον παρακάτω κώδικα ο οποίος λύνει το πρόβλημα μου αυτό :

Κώδικας: Επιλογή όλων

$met1 = " Lorem ipsum text e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw &#123;youtube&#125;uqfYNxP7GzM&#123;/youtube&#125;"; 
$pattern = "/&#123;youtube&#125;&#40;.*?&#41;&#123;\/youtube&#125;/";
preg_match_all&#40;$pattern, $met1, $matches&#41;;
if&#40;isset&#40;$matches&#91;0&#93;&#41; && !empty&#40;$matches&#91;0&#93;&#41;&#41; &#123;
    $id = reset&#40;$matches&#91;1&#93;&#41;;
    $met2= preg_replace&#40;$pattern, "<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/$id'></iframe>", $met1&#41;;
&#125;
echo $met2;
Όμως ορισμένες φορές το παραπάνω pattern έρχεται λίγο διαφορετικό, περιέχει δηλαδή κάτι παραπάνω και είναι σε αυτή τη μορφή :
{youtube}uqfYNxP7GzM |600|450|0{/youtube}
Η διαφορά όπως βλέπετε με το αρχικό pattern είναι ότι εδώ περιέχεται το "|600|450|0" επιπλέον. Αυτό έχει τη μορφή |τριψήφιοςαριθμός|τριψήφιοςαριθμός|μονοψήφιοςαριθμός και οι αριθμοί μπορεί να αλλάζουν.

Με τον κώδικα που χρησιμοποιώ για το αρχικό pattern όμως δεν μπορώ να δημιουργήσω σωστό link με iframe που να παίζει ...! Μπορείτε να με βοηθήσετε ώστε και στο δεύτερο pattern που σας ανέφερα να μπορώ να το κάνω iframe video και να παίζει ;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από dva_dev » 15 Ιούλ 2014 19:04

Για δοκίμασε κάτι τέτοιο:

Κώδικας: Επιλογή όλων

...
$pattern = "/&#123;youtube&#125;&#40;\w+&#41;&#40;\|\d+&#41;&#123;0,3&#125;&#123;\/youtube&#125;/";
preg_match_all&#40;$pattern, $met1, $matches&#41;;
if&#40;isset&#40;$matches&#91;0&#93;&#41; && !empty&#40;$matches&#91;0&#93;&#41;&#41; &#123;
	$id = $matches&#91;1&#93;&#91;0&#93;;
	$met2= "<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/&#123;$id&#125;'></iframe>";
&#125;
...

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 15 Ιούλ 2014 20:23

Χρησιμοποιώντας αυτό που μου έδωσες το output του iframe δεν βγαίνει σωστά, βγαίνει έτσι (με κενά και τους αριυμούς μέσα στο link):

Κώδικας: Επιλογή όλων

<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/ uFcTAk_A9Nc |600|450|0'></iframe>
Ενώ θα περίμενα και θέλω να βγεί έτσι :

Κώδικας: Επιλογή όλων

<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/uFcTAk_A9Nc'></iframe>
Ώστε να παίξει. Άρα τι φταίει, τι δεν κάνουμε σωστά ;

* Σημείωσε ότι με ότι δοκίμασα και εγώ πρίν σας γράψω το θέμα εδώ, παρόμοια λάθη έπαιρνα γιαυτό και αποφάσισα να ανοίξω το topic. Κάτι κάνουμε λάθος. Από regex δεν γνωρίζω.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6236
Εγγραφή: 30 Νοέμ 2004 03:09

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από fafos » 15 Ιούλ 2014 22:01

to id tou youtube einai panta 11 xarakthres.. opote:

Κώδικας: Επιλογή όλων

 $id = reset&#40;substr&#40;$matches&#91;1&#93;, 0, 11&#41;&#41;;
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από burnmind » 15 Ιούλ 2014 22:42

Και μία εναλλακτική πρόταση:

Κώδικας: Επιλογή όλων

$content = "Lorem ipsum text&#123;youtube&#125;uqfYNxP7GzM&#123;/youtube&#125;e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds &#123;youtube&#125;uqfYNxP7GzM |600|450|0&#123;/youtube&#125; f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw &#123;youtube&#125;uqfYNxP7GzM|600|450|0&#123;/youtube&#125;";

$pattern = '/&#123;youtube&#125;&#40;\w*&#41;&#40;.*?&#41;&#123;\/youtube&#125;/';

echo preg_replace&#40;$pattern, '<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/$1"></iframe>', $content&#41;;
edit: Άλλαξα το pattern από [A-Za-z0-9] σε \w, μια και μόλις άνοιξα ένα youtube video που παρατήρησα πως είχε underscore στο id του.

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 16 Ιούλ 2014 01:06

fafo και burninmind και τα 2 που μου προτείνατε δεν κάνουν output σωστά το link πάλι...
Δοκίμασα με το {youtube}uFcTAk_A9Nc |600|450|0{/youtube} δείτε πως το κάνει μετά στο iframe :

Κώδικας: Επιλογή όλων

<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/ uFcTAk_A9Nc|600|450|0'></iframe>
Βάζει μέσα στο src="..|600|450|0|" κάτι που δεν θέλω και με αυτά μέσα φυσικά το youtube video δεν παίζει.

Δεν μπορώ να καταλάβω τι είναι λάθος ;

Το σωστό θα έπρεπε να βγάζει αυτό :

Κώδικας: Επιλογή όλων

<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/uFcTAk_A9Nc'></iframe>

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από burnmind » 16 Ιούλ 2014 01:36

Τρέχοντας αυτό που σου έγραψα πριν, βγάζει το εξής (copy paste από το view-source), στο οποίο είναι σωστά και τα 3 URLs:

Κώδικας: Επιλογή όλων

Lorem ipsum text<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uqfYNxP7GzM"></iframe>e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds <iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uqfYNxP7GzM"></iframe> f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw <iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uqfYNxP7GzM"></iframe>
edit: Για την ιστορία, και ένα test με 3 versions του τελευταίου id που έδωσες:

Κώδικας: Επιλογή όλων

$content = "Lorem ipsum text&#123;youtube&#125;uFcTAk_A9Nc&#123;/youtube&#125;e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds &#123;youtube&#125;uFcTAk_A9Nc |600|450|0&#123;/youtube&#125; f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw &#123;youtube&#125;uFcTAk_A9Nc|600|450|0&#123;/youtube&#125;"; 
$pattern = '/&#123;youtube&#125;&#40;\w*&#41;&#40;.*?&#41;&#123;\/youtube&#125;/';
echo preg_replace&#40;$pattern, '<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/$1"></iframe>', $content&#41;;
Παράγει:

Κώδικας: Επιλογή όλων

Lorem ipsum text<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uFcTAk_A9Nc"></iframe>e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds <iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uFcTAk_A9Nc"></iframe> f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw <iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uFcTAk_A9Nc"></iframe>

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 16 Ιούλ 2014 02:06

Χμ εμένα όμως μου το βγάζει λάθος έτσι όπως σου είπα πριν.

Κώδικας: Επιλογή όλων

<iframe width='640' height='360' src='http&#58;//www.youtube.com/embed/ uFcTAk_A9Nc|600|450|0'></iframe>
Λές να παίζει ρόλο ότι στο κείμενο μέσα πριν το Pattern και μετά αυτό, υπάρχουν ορισμένα tags ...;;

</strong><br /><br /><iframe width='640' height='360' src='http://www.youtube.com/embed/ uFcTAk_A9Nc|600|450|0'></iframe></div></div></div><br /><br />

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 16 Ιούλ 2014 02:15

Νομίζω πως το βρήκα... :o

Τo λάθος το παρήγαγε ένα μικρό κενό !!!!!

Lorem ipsum text{youtube}uFcTAk_A9Nc{/youtube}e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds {youtube}uFcTAk_A9Nc |600|450|0{/youtube} f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw {youtube} uFcTAk_A9Nc|600|450|0{/youtube}

Tο κενό :
{youtube}ΕΔΩΤΟΚΕΝΟuFcTAk_A9Nc|600|450|0{/youtube}
Συγνώμη που σας ταλαιπώρησα... :(

Άρα το Pattern ορισμένες φορές έρχετε με κενό εκεί και ορισμένες φορές κανονικά χωρίς κενό :

-> (Με κενό)
{youtube} uFcTAk_A9Nc|600|450|0{/youtube}


-> (Χωρίς κενό)
{youtube}uFcTAk_A9Nc|600|450|0{/youtube}
Άρα πως να το τροποποιήσουμε ώστε να δέχετε και την περίπτωση του κενού μαζί έτσι ώστε όταν περιέχει κενό να μην υπάρχει πρόβλημα ;

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από burnmind » 16 Ιούλ 2014 02:32

Κώδικας: Επιλογή όλων

$pattern = '/&#123;youtube&#125;\s*&#40;\w*&#41;&#40;.*?&#41;&#123;\/youtube&#125;/';

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 16 Ιούλ 2014 02:46

Χμ.. πάλι δεν δουλεύει όμως αυτό το νέο που μου έδωσες για το κενό με το \s* .
Δοκίμασα με τον εξής κώδικα και όχι μόνο το video με το pattern με το κενό δεν παίζει αλλά τώρα δεν παίζει και το video με το pattern χωρίς κενό που έπαιζε πρίν !

Γιατί ;

Κώδικας: Επιλογή όλων

$pattern1 = '/&#123;youtube&#125;\s*&#40;\w*&#41;&#40;.*?&#41;&#123;\/youtube&#125;/';
$a4 = preg_replace&#40;$pattern1, '<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/$1"></iframe>', $a3&#41;;

Κώδικας: Επιλογή όλων

$pattern2 = '/&#123;youtube&#125;\s*&#40;\w*&#41;&#40;.*?&#41;&#123;\/youtube&#125;/';
$a5 = preg_replace&#40;$pattern2, '<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/$1"></iframe>', $a4&#41;;

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από burnmind » 16 Ιούλ 2014 03:32

Κοίτα, όπως και πριν, στο παράδειγμα που μας δίνεις λειτουργεί.
ManosApp έγραψε:Lorem ipsum text{youtube}uFcTAk_A9Nc{/youtube}e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds {youtube}uFcTAk_A9Nc |600|450|0{/youtube} f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw {youtube} uFcTAk_A9Nc|600|450|0{/youtube}
Χρησιμοποιώντας το παράδειγμά σου με τον ίδιο κώδικα με πριν (+ την αλλαγή για το white space):

Κώδικας: Επιλογή όλων

$content = "Lorem ipsum text&#123;youtube&#125;uFcTAk_A9Nc&#123;/youtube&#125;e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds &#123;youtube&#125;uFcTAk_A9Nc |600|450|0&#123;/youtube&#125; f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw &#123;youtube&#125; uFcTAk_A9Nc|600|450|0&#123;/youtube&#125;"; 
$pattern = '/&#123;youtube&#125;\s*&#40;\w*&#41;&#40;.*?&#41;&#123;\/youtube&#125;/';
echo preg_replace&#40;$pattern, '<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/$1"></iframe>', $content&#41;;
Παράγει:

Κώδικας: Επιλογή όλων

Lorem ipsum text<iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uFcTAk_A9Nc"></iframe>e3txt sdfsdds f dsf sdf dsfsdfds fds fds fds <iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uFcTAk_A9Nc"></iframe> f dsf sdf sd fds fd Lorem ipsum sgsdfds fds fds fdsfsdfsdfds domr text jwweorw <iframe width="640" height="360" src="http&#58;//www.youtube.com/embed/uFcTAk_A9Nc"></iframe>
Το οποίο είναι σωστό. (Btw, αυτή η απλή και γρήγορη δοκιμή -ένα copy & paste σε ένα νέο script άσχετο με την εφαρμογή σου- είναι το πρώτο πράγμα που πρέπει να δοκιμάζεις κάθε φορά που σου απαντάει κάποιος ώστε να αντιληφθείς αν η απάντηση που σου δίνει είναι σωστή ή όχι).

Οπότε, ξέροντας πως το παραπάνω δουλεύει σωστά με τα δεδομένα που μας δίνεις, μπορούμε να συμπεράνουμε πως είτε κάτι "περίεργο" συμβαίνει με το πραγματικό κείμενο που έχεις (πχ προηγουμένως βρήκες το πρόβλημα με το κενό το οποίο δεν περίμενες πως θα υπάρχει εκεί, οπότε μπορεί να συμβαίνει κάτι παρεμφερές), ή χρησιμοποιείς τον κώδικα λάθος.

Όπως και να 'χει, κανείς δε μπορεί να μαντέψει τι συμβαίνει ώστε να σε βοηθήσει. :wink:

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από ManosApp » 16 Ιούλ 2014 03:58

Οκ συγνώμη αν σε κούρασα, ασχολούμαι ερασιτεχνικά, οι γνώσεις που έχω δεν φτάνουν τις δικές σας και τις έχω αποκτήσει διαβάζοντας μέσα από το ίντερνετ οπότε την κατανόηση σου παρακαλώ.

Έχεις δίκιο ευχαριστώ για τη βοήθεια, κάτι λάθος κάνω εγώ θα το βρώ !

ΥΓ. Ένα πράγμα που δεν ξέρω είναι τα regex, ποιος ο πιο εύκολος τρόπος να μάθω, έχεις να προτείνεις κάποια σελίδα ;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από alou » 16 Ιούλ 2014 10:04

Μια χαρά δουλεύει το pattern του burnmind, δοκίμασε να αφήσεις και αλλού περιθώριο για spaces, πχ

Κώδικας: Επιλογή όλων

$pattern = '/&#123;\s*?youtube\s*?&#125;\s*?&#40;\w*&#41;&#40;.*?&#41;&#123;\s*?\/youtube\s*?&#125;/';
Το κείμενο ποιυ το δοκιμαζεθις και δεν δουλεύει ακριβώς ποιο είναι? το μόνο που νομίζω δεν πιάνει, είναι spaces ανάμεσα στα pipes -> | 600 | 100 |

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πως να φτιάξω ένα iframe video μέσα από το pattern αυτό ;

Δημοσίευση από burnmind » 16 Ιούλ 2014 12:51

@ManosApp: Το αν έχεις γνώσεις ή όχι είναι άσχετο. Πολύ καλά κάνεις και ρωτάς, γι' αυτό υπάρχει το forum άλλωστε, και όπως είδες πήρες μια χαρά απαντήσεις σε όσα ρώτησες.

Αυτό που προσπάθησα να σου δείξω (ίσως χωρίς επιτυχία) στο τελευταίο μήνυμα είναι πως δε ρωτάς σωστά. Για παράδειγμα, αναφέρεις συχνά πως οι απαντήσεις που πήρες δε λειτουργούν σωστά χωρίς να δίνεις κάποιο νέο παράδειγμα για το πως τις χρησιμοποίησες, κι ενώ τουλάχιστον προσωπικά έλεγξα και έδειξα πως οι δικιές μου δουλεύουν κανονικά, κάτι που κάνει τον άλλον να πιστεύει πως δεν ασχολήθηκες καν με τις απαντήσεις, άσχετα αν όντως το έκανες.

Επίσης, θεωρώ πως είναι κοινή λογική πως όταν κάτι δε λειτουργεί και αναζητούμε βοήθεια, πρέπει να δίνουμε όσες παραπάνω πληροφορίες μπορούμε για το πρόβλημα. Στην περίπτωσή μας, γιατί δεν ποστάρεις ολόκληρο τον κώδικα που σου δημιουργεί πρόβλημα; Όπως έγραψα ξανά, ρωτάς γιατί δε δουλεύει κάτι που δε μπορεί κανείς εκτός από 'σένα να δει πως λειτουργεί, άρα ζητάς να μαντέψομε ποιο είναι το πρόβλημα.

Πάντα φιλικά τα παραπάνω, άσχετα αν ο γραπτός λόγος μπορεί να δίνει διαφορετική εντύπωση κάποιες φορές. :)

Όσο για τα regular expressions, δυστυχώς δεν έχω κάποιο καλό resource μάθησης να σου προτείνω, καθώς τα τελευταία χρόνια απλά ψάχνω παραδείγματα όταν δε θυμάμαι κάτι (ή ρίχνω μια ματιά σε ένα αρχαίο cheat sheet που έχω κοντά). Μπορείς πάντως να βρεις μερικά ωραία παραδείγματα εδώ (πίνακας 4.1), αν και θα πρότεινα να μη μείνεις στη θεωρία, αλλά να τα δουλέψεις στην πράξη.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες