RegEx, URLs und Youtube VIDs
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
beispiel
benutzer
code
dank
ergebnis
erkennen
erlauben
flasche
folgendem format
ftp
funktion
hilfestellung
http
match
sache
text
url
video
winzige anwendungen
-
Hallo Community,
folgendes Problem, bei dem ich einfach nicht weiterkomme:
Ich habe ein Eingabefeld, in welches der Benutzer Text (unter anderem eben auch URLs und Links zu Youtube Videos) eingeben kann.
Wenn der Benutzer diese Eingabe speichert, möchte ich nun automatisch dass alle Links zu <a href="URL">URL</a> werden AUßER der Youtube Links. Diese möchte ich in folgendem Format haben :
<span class="youtube" vid="VIDEO_ID">URL <a href="URL" taget="_blank"><img src="images/youtubeicon.png" /></a></span>
Meine Frage, wie löse ich das am besten? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
freezinger schrieb:
Mit einem entsprechenden RegEx und
wie löse ich das am besten?
sowie einer Funktion die erkennt ob es sich um ein Youtube-Video handelt die vonpreg_replace()
aufgerufen wird und anhand deren Rückgabe die URL durch den richigen Text ersetzt wird.preg_replace()
Brauchst du etwa ein Beispiel?
Beitrag zuletzt geändert: 8.9.2012 13:11:38 von hackyourlife -
Brauchst du etwa ein Beispiel?
Ein Beispiel, oder andere Hilfestellung wäre toll.
Bin zugegeben eine Flasche was RegEx betrifft. -
Dann hast du dir ja das einfachste ausgesucht...
Als hätt ich mir das ausgesucht :D
Soll das RegEx nur http(s) und ftp(s) erlauben? Das würde die Sache gewaltig vereinfachen...
http(s) alleine würde auch schon reichen. -
freezinger schrieb:
So möge es sein:
http(s) alleine würde auch schon reichen.<?php $text = <<< 'EOT' <pre> hallo, das ist ein Text, der einen Link auf https://www.lima-city.de/ beinhaltet, ebenfalls gibt es ein Link auf einen Post (https://www.lima-city.de/board/action:jump/1081208) Auch ein Youtube-Link ist vorhanden: https://www.youtube.com/watch?feature=player_detailpage&v=rp8hvyjZWHs#t=157s </pre> EOT; function processURL($url) { $urlhtml = htmlentities($url); $youtube = parseYoutube($url); if($youtube !== false) return <<< EOT <span class="youtube" vid="VIDEO_ID"><a href="$urlhtml" taget="_blank"><img src="images/youtubeicon.png" /></a></span> EOT; return "<a href=\"$urlhtml\">$urlhtml</a>"; } function parseYoutube($url) { $regex1 = '/^(https?:\/\/)?(\w+\.)?youtube\.com\/watch\?.*v=([\w\-]+)/i'; $regex2 = '/^(https?:\/\/)?(\w+\.)?youtu\.be\/([\w\-]+)/i'; if(preg_match($regex1, $url, $match)) return $match[3]; // auch wenn du das nicht verwendest if(preg_match($regex2, $url, $match)) return $match[3]; return false; } $regex = '|https?://[a-zA-Z0-9\\-]+?\\.[a-zA-Z0-9\\-.]+/[a-zA-Z0-9%#/:=&\\?_]*|e'; $replacement = 'processURL(\'\\0\')'; $text = preg_replace($regex, $replacement, $text); echo($text); ?>
-
hackyourlifeschrieb:
freezingerschrieb:
wie löse ich das am besten?
Mit einem entsprechenden RegEx und
preg_replace()
sowie einer Funktion die erkennt ob es sich um ein Youtube-Video handelt die von
preg_replace()
aufgerufen wird und anhand deren Rückgabe die URL durch den richigen Text ersetzt wird.
regex ist etwas umständlicher und auch definitiv langsamer!
wie wäre es mitif(strpos($url,"youtube")!==false) { $a = '<span class="youtube" vid="VIDEO_ID">URL <a href="'.$url.'" taget="_blank"><img src="images/youtubeicon.png" /></a></span>'; } else { $a = '<a href="'.$url.'">URL</a>'; }
Beitrag zuletzt geändert: 9.9.2012 18:25:58 von dishonored -
dishonored schrieb:
Das mag sein, aber dafür ist es weit akkurater und lässt sich nicht austricksen wie deine Variante. Deine Variante würde das als Youtube erkennen:
regex ist etwas umständlicher und auch definitiv langsamer!https://www.google.at/search?q=youtube https://www.lima-city.de/thread/regex-urls-und-youtube-vids/
und jede andere URL in der irgendwo das Wort youtube vorkommt. Dabei würdest du nicht einmal die URLs von
erkennen...http://youtu.be/
Also was nützt es einem, wenn der Code zwar schnell ist, aber ein ungenaues Ergebnis liefert? -
meinst du das ernst?
genau so wie mal eine regex abfrage spezifizieren kann, kann man diese abfrage auch spezifizieren!
ein einfaches http// oder auch nur ein // oder :// davor würde schon fast alle ausschließenen
ein einfaches array, welches die varrianten durchgeht wäre dann quasi das gleiche wie eine regex lösung
jedenfalls vom ergebnis
klar ist regex top, mmn nur nicht für solch "winzige" anwendungen gedacht
im grunde kansts ja machen wie du willst... hast schon recht, wenn du die strpos in ner schleife laufen lassen würdest wäres warscheinlich wieder langsamer.. regex ist die ordentliche und schöne varriante, viele andere sind möglich schneller aber eben nicht so "spießig" ;)
//edit:
für den TE, damit meine ich dann einfach zB.
if(strpos($url,"://youtu")!==false) oder oder oder
Beitrag zuletzt geändert: 9.9.2012 19:55:05 von dishonored -
Hallo. Sry ich weis nicht mehr von wo ich das Script hatte aber es ist ein einfacher Parser, der den Link automatisch in den Embedcode konvertiert. Also von
http://youtube.com/?v=df1s564gf
zu
http://youtube.com/v/df1s564gf
Da sich der Code hier irgendwie nicht ganz ausgeht -> http://pastebin.com/4WvYbCPW
Ich hoffe es hilft... lg manuel -
@hackyourlife: Dankeschön, macht wirklich GENAU das was ich gebraucht habe! :D
@buergerforum: Wäre eine möglichkeit, wenn ich das Youtube Video direk einbinden will - was aber nicht der fall ist ;D
Trotzdem Danke für den Vorschlag. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage