philos Δημοσ. 27 Απριλίου 2016 Δημοσ. 27 Απριλίου 2016 Σας παραθέτω ένα πρόβλημα που έχω σε 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. Απλά θέλω το πρώτο στοιχείο που εμφανίζεται μέσα στο κείμενο. Ευχαριστώ
defacer Δημοσ. 28 Απριλίου 2016 Δημοσ. 28 Απριλίου 2016 Regular expression. if (preg_match('/[IMG](.*)[\/IMG]/', $pagetext, $matches)) { $imageurl = $matches[1]; } Απο κει και πέρα απλά αλλάζεις τη regex κατάλληλα για να πιάνει και τα youtube url και αντίστοιχα διαβάζεις ο,τι χρειάζεσαι από τη $matches.
philos Δημοσ. 28 Απριλίου 2016 Μέλος Δημοσ. 28 Απριλίου 2016 Μπορείς να μου γράψεις και τη 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.
defacer Δημοσ. 28 Απριλίου 2016 Δημοσ. 28 Απριλίου 2016 Κοίτα υπάρχουν πολλοί τρόποι να το κάνεις και δεν έχει ιδιαίτερο νόημα να τους συζητήσουμε όλους. Απ' ότι έχω καταλάβει αυτό που θες (αν και δεν καταλαβαίνω πώς ακριβώς βολεύει) είναι αυτό $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... καλή φάση να το αναλύσουμε αλλά μόνο αν πραγματικά σ' ενδιαφέρει να μάθεις.
philos Δημοσ. 29 Απριλίου 2016 Μέλος Δημοσ. 29 Απριλίου 2016 Σε ευχαριστώ! Θα το δοκιμάσω σύντομα και θα σου πω!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα