Probleme mit Funktion

diggity

Erfahrenes Mitglied
Heyho,

hab da eine Funktion, die mir URIs zu einem "klickbaren" Link verwandelt:

PHP:
<?php
	function links($txt) { //urls automatisch umwandeln
		$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>';
		$txt = preg_replace($p, $r, $txt);
  	return $txt;
	}
?>

Aufgerufen wird sie in einer while-Schleife:
PHP:
	while($row = mysql_fetch_array($result)) {
	include_once("inc/link_fn.php");
	$txt = links($row['txt']);
	echo $txt;

Das Problem dabei ist, dass nicht alle URIs ersetzt werden!?
Sieht dann bei der Ausgabe ungefähr so aus:

http://asdasdasd.de http://www.de.de
http://asdasdasd.de http://www.de.de

http://asdasdasd.de http://www.de.de

Bei [ url ] wird kein <a href="..."> gesetzt. Warum ist das so? Kanns mir nicht erklären.

Besten Dank
MfG
diggity
 
diggity hat gesagt.:
Hab jetzt das ^ in der ersten regexp rausgenommen, jetzt funzts.
Aber wie stelle ich es an, dass z.b. www.bla.de auch umgewandelt wird? zzt werden nur "richtige" URIs mit http:// vorne dran wie http://bla.de und http://www.bla.deumgewandelt

Hallo,

du könntes ja bevor du die Daten in deine Datenbank speicherst prüfen, ob das http:// vorhanden ist, und wenn nicht, dass es dan hinzugefügt wird.
 
forsterm hat gesagt.:
Hallo,

du könntes ja bevor du die Daten in deine Datenbank speicherst prüfen, ob das http:// vorhanden ist, und wenn nicht, dass es dan hinzugefügt wird.

Wär ne Möglichkeit über die ich auch schon nachgedacht habe, aber bei der Ausgabe das hinzuzufügen ist doch schöner. Kenn mich mit den regexen nicht so ausm, weiß da einer wie das funktioniert mit dem www?
 
Zurück