kostenloser Webspace werbefrei: lima-city


funktion mit werten aus ereg_replace ausführen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    o******e

    Hallo.
    Für ein Schript welches Links ersetzt und ihnen den namen der Seite zu der Sie verlinkt sind gibt, muss ich das gefundene durch eine ref="/tag/funktion">Funktion schicken, bis jetzt hab ich das so:
    $titel = new Titel();
    
    		$this->str = eregi_replace("([^\"[[:alpha:]]|^)([[:alpha:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "\\1<a ".$this->urlFormat."\\2://\\3\\4\"target=\"".$this->urlTarget."\">".$titel->title('\\2://\\3\\4')."</a>", $this->str);


    Die Funktion wird zwar ausgeführt, aber ohne die URL ( \\2://\\3\\4)....

    Ist es möglich die Funktion mit der URL ausführen zu lassen?

    Ich brauch auch immer ewig bei RegEX und dazugehörigem...

    lg
    Oleander
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Was willst Du denn genau erreichen, bzw. was willst Du durch die Funktion jagen?
  4. Autor dieses Themas

    o******e

    Sorry wenn du das flash verstenden hast.

    Ich wil durch die Funktion den Link jagen, der von eregi_replace gefunden wurde.
    Die Funktion gibt dann den Titel des Links bzw. der verlinkten Seite zurück.
    Bsp:
    Irgendwo im Text steht http://www.google.de nun wird dies von eregi_replace gefunden und soll durch die Funktion gejagt weden.
    Also: ".$titel->title('\\2://\\3\\4')." sollte dann heißen: ".$titel->title('http://www.google.de')."
    Nun gibt die funktion den Titel der Seite zurück (Google) und eregi_replace ersetzt.

    Gecheckt?

    Geht das so wie ich das hab?
    (
    $titel = new Titel();
    
    		$this->str = eregi_replace("([^\"[[:alpha:]]|^)([[:alpha:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "\\1<a ".$this->urlFormat."\\2://\\3\\4\"target=\"".$this->urlTarget."\">".$titel->title('\\2://\\3\\4')."</a>", $this->str);
    )

    lg
    Oleander

    €dit:
    Die Funktion:
    function title($url) {
    	$curl1 = curl_init();
    	curl_setopt($curl1, CURLOPT_URL, $url);
    	curl_setopt($curl1, CURLOPT_CONNECTTIMEOUT, 2);
    	curl_setopt($curl1, CURLOPT_RETURNTRANSFER, 1);
    	$ausgabe = curl_exec($curl1);
    	preg_match_all("|<title>(.*)<\/title>|U", $ausgabe, $treffer, PREG_PATTERN_ORDER);
    	return $treffer[1][0];
            }


    Beitrag zuletzt geändert: 3.4.2009 5:38:34 von olearose
  5. ereg_ wird in PHP6 abgeschafft, also solltest du gleich zu preg_ greifen. Dort gibt es auch die Funktion preg_replace_callback, wo du eine Funktion angeben kannst, die dann deine gewünschten Sachen tut. Das sollte genau das sein, was du suchst.
  6. Wie tct schon schrieb preg_replace_callback() wirkt da Wunder.
    Hier auch für dich ein kleines Beispiel:
    <?php
    # macht die Umwandlung URL > Title
    function callback_getTitle($arr_url) {
        $ret = '';
        $url = parse_url($arr_url[0]);
        
        switch($url['host']) {
            case 'www.google.de':   $ret .= 'Google'; break;
            case 'www.php.net':     $ret .= 'PHP.NET'; break;
            case 'de3.php.net':     $ret .= 'PHP.NET'; break;
            default:
                $ret .= 'unbekannt';
        }
        
        // evtl. Subpages des Hastes -> Subtitel anhängen
        switch($url['path']) {
            case '/preferences':    $ret .= '-Einstellungen'; break;        
            case '/manual/de/function.preg-replace-callback.php':    $ret .= '-Subpage'; break;
        }
        
        return $ret;
    }
    
    $text = 'Hier ist ein wenig Text mit http://www.google.de/ zu google ;-)
    es geht auch http://www.google.de/preferences?hl=de zu den Einstellungen.
    Abhilfe schafft auch ein Blick zu http://www.php.net bzw. http://de3.php.net/manual/de/function.preg-replace-callback.php
    Hoffe es hilft.';
    
    $res = '';
    $res = preg_replace_callback('§\b(?:https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]§si', 'callback_getTitle', $text);
    
    echo $res;
    ?>


    Grüßle

    Beitrag zuletzt geändert: 3.4.2009 13:34:57 von scout
  7. Autor dieses Themas

    o******e

    Danke.

    Keine Ahnung warum ich da sowieso eregi_replace genommen hab, vermutlich weil ich nach nem RegEx gesucht hab und das gefunden und angepasst hab. Sonst nimm ich auch preg da's zu Pearl kompatibel ist.
    Naja, ich Probier mal nen bissel mit rum, andernfalls nimm ich den komplexeren weg über preg_match_all ;)

    Ach so, dein Script sieht gut aus und ich habs auch mit meiner Funktion gefüllt, nur dein RegEx is wohl falsch, oder?

    Sorry, RegEx ist etwas an php die ich nur bedingt kann... :slant:


    lg
    Oleander

    €dit:
    So hab ich das jetzt angepasst:
    <?php
    function callback_getTitle($arr_url) {
        $url = parse_url($arr_url[0]);
        $urli = $url['host'].$url['path'];
    	$curl1 = curl_init();
    	curl_setopt($curl1, CURLOPT_URL, $urli);
    	curl_setopt($curl1, CURLOPT_CONNECTTIMEOUT, 2);
    	curl_setopt($curl1, CURLOPT_RETURNTRANSFER, 1);
    	$ausgabe = curl_exec($curl1);
    	preg_match_all("|<title>(.*)<\/title>|U", $ausgabe, $treffer, PREG_PATTERN_ORDER);
    	return print_r($treffer) bzw. $treffer[0][1];
    }
    
    $text = 'Hier ist ein wenig Text mit http://www.google.de/ zu google ;-)
    es geht auch http://www.google.de/preferences?hl=de zu den Einstellungen.
    Abhilfe schafft auch ein Blick zu http://www.php.net bzw. http://de3.php.net/manual/de/function.preg-replace-callback.php
    Hoffe es hilft.';
    
    $res = preg_replace_callback('/(^| )((ht{2}p:\/\/)|(w{3}\.))(\w+\.)?\w+\.{1}([A-Za-z]{2,4})?(:\d{2,4})?((\/)?\S*)+/i', 'callback_getTitle', $text);
    
    echo $res;
    ?>


    Leider funktioniert das nicht, sieht jemand den Fehler?

    Ausgabe mit print_r: http://cpg.xe.cx/testing/test1.php

    Beitrag zuletzt geändert: 3.4.2009 16:58:40 von olearose
  8. 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!