kostenloser Webspace werbefrei: lima-city


URLs ersetzen (intern/extern unterscheiden)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    eap

    eap hat kostenlosen Webspace.

    Ich hab mir das Script von http://www.php-einfach.de/tuts_php_links.php herruntergeladen, und ein wenig erweitert. Das Problem ist aber, dass immer ein neuer Tab geöffnet wird, wenn ich auf einen dieser Link klicke.
    Ich könnte das Script problemlos so ändern, dass alle Links im gleichen Tab ausgeführt werden, ich würde es aber lieber so machen, dass alle Links, die mit meinem URL anfangen, im gleichen Tab, und alle anderen Links in einem Neuen Tab die Verlinkte Seite öffnet. Leider bin ich nicht der Beste in PHP, darum verstehe ich den CODE nicht wirklich.
    Könnt ihr mir villeicht helfen?

    Hier der Code:

    <?php
    $text = "http://www.php-einfach.de und klaus@mustermann.de";
    
    //Aus http://url wird [URL]http://url[/URL]
    $urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
    $urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
    
    $urlreplace[]="\\1[URL]\\2\\4[/URL]";
    $urlreplace[]="[URL]\\1\\3[/URL]";
    
    $text = preg_replace($urlsuch, $urlreplace, $text);
    
    //Die URL's werden zu Links
    $text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);
    
    $text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
    
    $text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">\\2</a>", $text);
    
    $text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);
    ?>


    mfg. eap
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Das könntest du zwar machen, aber es gäbe noch einen anderen, sogar validen Weg: JQuery.

    Aber um deine Frage zu beantworten... Um bei deiner eigenen URL target="_blank" nicht mit an den Link anzuhängen, muss die Suchroutine erst einmal deine URL kennen =)

    Danach könntest du z.b. mittels preg_match prüfen, ob der String deine URL enthält bzw. ob es sich um eine URL im Stil von http://www. handelt, oder nicht.

    Es gibt im Internet mittlerweile diverse Parserklassen für BBCodes. Schau dir z.B. mal diese an. Ist gut dokumentiert und eine der am meisten genutzen Klassen.

    Das Contrexx CMS beispielsweise macht es so:

    function do_bbcode_url ($action, $attributes, $content, $params, $node_object) {
    //		$urlRegex = '#([a-zA-Z]+://)?(.*)#';
    	    if ($action == 'validate') {
    	    	if(!isset ($attributes['default'])) {
    	    		return $this->is_valid_url($content);
    	   		}else{
    	    		return $this->is_valid_url($attributes['default']);
    	   		}
    	    }
    		$httpRegex = '#^(http://)?(www\.)?([a-zA-Z][a-zA-Z0-9-/]+\.[a-zA-Z][a-zA-Z0-9-/&\#\+=\?\.;%]+)+#i';
    	    if(!isset ($attributes['default'])) {
    	    	$content = preg_replace($httpRegex, 'http://$2$3' ,$content);
    	        return '<a target="_blank" href="'.htmlspecialchars ($content, ENT_QUOTES, CONTREXX_CHARSET).'">'.htmlspecialchars ($content, ENT_QUOTES, CONTREXX_CHARSET).'</a>';
    	    }
        	$attributes['default'] = preg_replace($httpRegex, 'http://$2$3' , $attributes['default']);
    	    return '<a target="_blank" href="'.htmlspecialchars ($attributes['default'], ENT_QUOTES, CONTREXX_CHARSET).'">'.$content.'</a>';
    	}


    Beitrag zuletzt geändert: 23.5.2010 0:40:22 von fabo
  4. Autor dieses Themas

    eap

    eap hat kostenlosen Webspace.

    Mir ist gerade eine Lösung eingefallen, die auch schon getestet wurde, und funktioniert.
    Dabei wird ein Link, der mit <a target=\"_blank\" href=\"http:// und dem Servernamen beginnnt in <a href=\"http:// umbenannt.
    Hier der CODE:

    $server_name = $_SERVER["SERVER_NAME"];
    
    $text = str_replace("<a target=\"_blank\" href=\"http://$server_name", "<a href=\"http://$server_name", $text);


    das ganze funktioniert problemlos, und kann in jede Internettseite eingebunden werden.

    mfg. eap


    Beitrag zuletzt geändert: 23.5.2010 17:43:02 von eap
  5. 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!