URL aus fließtext auslesen

GalaxyWarrior

Erfahrenes Mitglied
Hi, ich wollte aus einem Fließtext URL's auslesen, und in einen Link umwndeln, leider klappt das nicht. Der Apache von meinem XAMPP ist nach aufruf der Page nichtmehr zu gebrauchen bis ich den PC neu starte.

PHP:
while($c < strlen($daten[News]){
    $substr = substr($daten[News], $c, 1);
    if($substr == "h"){
        $urlstr = substr($daten[News], $c, 7);
        if($urlstr == "http://"){
            $c=$c+7;
            while(urltmp != " "){
                $urltmp = substr($daten[News], $c, 1);
                if($urltmp != " "){
                    $urlstr = $urlstr.$urltmp;
                    $c++;
                }else{
                }
            }
        }
    }
    $c++
}

Falls jemand eine bessere Idee hat bin ich ganz Ohr :)
Leider kann ich nicht so oft on sein, da ich im Urlaub bin und ne gaaaaaaaaaaaaaanz miese Internetverbindung über W-Lan hab

Gruß GalaxyWarrior
 
Hallo,
meinst du so was?
PHP:
<?
function links($text) { 
$p[] = '"(( |^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"i'; 
$r[] = '<a href="\1" target="_blank">\\1</a>'; 
$p[] = '"( |^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"i'; 
$r[] = '\\1<a href="http://\2" target="_blank">\\2</a>'; 
$p[] = '"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})"i'; 
$r[] = '<a href="mailto:\1">\\1</a>'; 
$text = preg_replace($p, $r, $text); 
return $text; 
}
 
echo links("http://www.test.de, www.test.de, http://test.de, http://test.de/index.php?seite=home");
?>

mfg
forsterm
 
Was soll das ausgeben? Wenn ich meinen Text darn übergebe, dann wird er mir nur genau so wieder ausgegeben. Gruß GalaxyWarrior
 
Ähm... Hast du es schon ausprobiert? :rolleyes:
Weil die Antwort ist NEIN, dein Text wird nicht einfach nur wieder ausgegeben! (Siehe preg_replace())
 
Probier mal Folgendes:
PHP:
<?php

	$url_patterns = array(
		// @link	http://www.foad.org/~abigail/Perl/url2.html
		'http'		=> "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)",
		'ftp'		=> "(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)",
		'mailto'	=> "(?:mailto:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)"
	);

	$pattern = '/(' . addcslashes($url_patterns['http'], chr(0x2F)) . '|' . addcslashes($url_patterns['ftp'], chr(0x2F)) . '|' . addcslashes($url_patterns['mailto'], chr(0x2F)) . ')/';
	$string = preg_replace($pattern, '<a href="$1">$1</a>', $string);

?>
 
@mauri
Doch, habe ich! Wenn ich : echo links("Dies ist eine URL:http://www.manuel-ritter.de"); eingebe, dann bekomme ich genau das wieder ausgegeben!

Gruß GalaxyWarrior

@Gumboo:
Danke,werde ich testen
 
So, W-Lan is ma wieder da :D

Funktioniert super, aber, ich würde schon gerne wissen, warumm ich mir mit meiner Idee den Apache so hofnungslos zerschieße. Hat da einer ne Idee?

Gruß GalaxyWarrior
 
Warumm denn? Wenn ich einen String "Hallo Welt http://www.welt.de weiter gehts hier" habe, dann ist doch, wenn er alle Zeichen von w an ließt irgendwann bei " "
Wenn ich mit if sage, dass er immer wenn " " ist etwas schreiben soll, dann schreibt der ja auch nur da wo ein " " ist.

Gruß GalaxyWarrior
 
urltmp ist keine Variable, sondern eine Konstante mit dem Inhalt "urltmp". Du hast also das $-Zeichen vergessen.

Abgesehen davon kann es auch sein, dass eine URL am Ende einer Zeichenkette steht, also kein Leerschritt mehr nach ihr erscheint. Damit würde auch wieder eine Endlosschleife entstehen.
 

Neue Beiträge

Zurück