Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Σας παραθέτω ένα πρόβλημα που έχω σε PHP.

 

Έστω ότι έχουμε το κείμενο ενός forum post (το οποίο μπορεί να έχει και bbcode μέσα), στη μεταβλητή $pagetext. Για να πάρω το url της πρώτης εικόνας που βρίσκεται μέσα στο κείμενο (σε tag) κάνω το εξής:

          $imageurl = str_replace(' ', '', $pagetext);
          $imageurl= strstr($imageurl, '[IMG]');
          $imageurl = str_replace('[IMG]', '', $imageurl);
          $imageurl = substr($imageurl, 0, strpos($imageurl, "[/"));  

Θέλω όμως να αλλάξω τον κωδικά ώστε:

α) Να ελέγχει αν υπάρχει και σύνδεσμος youtube μέσα στο $pagetext και να εξάγει σε κάποια μεταβλητή το video id του.

β) Να επιστρέφεται σε μια τελική μεταβλητή, ας την πούμε $final_text είτε το url της εικόνας είτε το youtube video id, όποιο από τα δύο εμφανίστηκε πρώτο μέσα στο κείμενο (βασικά αυτό με ενδιαφέρει να πετύχω οπότε δεν είμαι σίγουρος αν είναι ανάγκη να τρέξουν και οι δύο κώδικες απαραίτητα).

 

Το κονσεπτ είναι να εντοπίζονται εικόνες (είτε img είτε youtube video thumbnail) και να χρησιμοποιούνται οι εικόνες δίπλα από το topic ως preview. Απλά θέλω το πρώτο στοιχείο που εμφανίζεται μέσα στο κείμενο.

 

Ευχαριστώ :-)

 

Δημοσ.

Regular expression.

if (preg_match('/[IMG](.*)[\/IMG]/', $pagetext, $matches)) {
    $imageurl = $matches[1];
}

Απο κει και πέρα απλά αλλάζεις τη regex κατάλληλα για να πιάνει και τα youtube url και αντίστοιχα διαβάζεις ο,τι χρειάζεσαι από τη $matches.

Δημοσ.

Μπορείς να μου γράψεις και τη regular expression για τα youtube video urls?

 

Έχω βρει αυτό και θα το δοκιμάσω σε λίγο:

/(http:|https:)?\/\/(www\.)?(youtube.com|youtu.be)\/(watch)?(\?v=)?(\S+)?/

Δηλαδή βάζω και τη regular expression μέσα στην παραπάνω preg_match και το $matches[1] θα είναι η πληροφορία που θέλω, ή πρέπει να τρέξω άλλη preg_match? Το λέω γιατί το ζητούμενο είναι να πάρω το πρώτο στοιχείο ή youtube video που εμφανίζεται στο $pagetext. :-)

Δημοσ.

Κοίτα υπάρχουν πολλοί τρόποι να το κάνεις και δεν έχει ιδιαίτερο νόημα να τους συζητήσουμε όλους. Απ' ότι έχω καταλάβει αυτό που θες (αν και δεν καταλαβαίνω πώς ακριβώς βολεύει) είναι αυτό

 

$regex = '~(?:\[img\](.*)\[/img\])|(??:youtube\.com|youtu\.be)(?:/watch)?\?v=)([a-z0-9]+)~i';

if (preg_match($regex, $pagetext, $matches)) {
    $imageurl = $matches[1] ?: $matches[2];
    echo "Whole match: $matches[0]\n";
    echo "URL/YouTube id: $imageurl\n";
}

Το πώς και γιατί αυτού του regular expression... καλή φάση να το αναλύσουμε αλλά μόνο αν πραγματικά σ' ενδιαφέρει να μάθεις.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...