kostenloser Webspace werbefrei: lima-city


RegEx, URLs und Youtube VIDs

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    freezinger

    Kostenloser Webspace von freezinger

    freezinger hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    freezinger schrieb:
    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.

    Brauchst du etwa ein Beispiel?

    Beitrag zuletzt geändert: 8.9.2012 13:11:38 von hackyourlife
  4. Autor dieses Themas

    freezinger

    Kostenloser Webspace von freezinger

    freezinger hat kostenlosen Webspace.


    Brauchst du etwa ein Beispiel?


    Ein Beispiel, oder andere Hilfestellung wäre toll.
    Bin zugegeben eine Flasche was RegEx betrifft.
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    freezinger schrieb:
    Bin zugegeben eine Flasche was RegEx betrifft.
    Dann hast du dir ja das einfachste ausgesucht... ;-)

    Soll das RegEx nur http(s) und ftp(s) erlauben? Das würde die Sache gewaltig vereinfachen...
  6. Autor dieses Themas

    freezinger

    Kostenloser Webspace von freezinger

    freezinger hat kostenlosen Webspace.


    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.
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    freezinger schrieb:
    http(s) alleine würde auch schon reichen.
    So möge es sein:
    <?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);
    
    ?>
  8. 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 mit
    if(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
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    dishonored schrieb:
    regex ist etwas umständlicher und auch definitiv langsamer!
    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:
    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
    http://youtu.be/
    erkennen...

    Also was nützt es einem, wenn der Code zwar schnell ist, aber ein ungenaues Ergebnis liefert?
  10. 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
  11. b**********m

    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
  12. Autor dieses Themas

    freezinger

    Kostenloser Webspace von freezinger

    freezinger hat kostenlosen Webspace.

    @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.
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!