PHP: Parser parst nicht
Verfasst: 24.10.2002 18:57:31
Ich hab für die Newsseite mir ne kleine Parserfunktion zusammengestückelt (aus dem phpBB2-Code, includes/bbcode.php), die URLs in HTML-Formatierte Links umwandeln soll. Nur leider funktioniert die nur zur hälfte.
Wenn ich die Funktion direkt mit nem Wert aufrufe, dann bekomme ich als Ausgabe nen korrekt HTML-formatierten Link. Wenn ich die Funktion aber mit ner Variable aufrufe, deren Inhalt aus ner Textdatei eingelesen wurde, dann bekomm ich nur den Variableninhalt zurück.
und
klappen einwandfrei, während
nicht das gewünschte Ergebniss bringt. Wo klemmts? Hab schon ne andere Textdatei als Quelle genommen, das funktioniert aber genausowenig.
Code: Alles auswählen
function make_clickable($text)
{
// pad it with a space so we can match things at the start of the 1st line.
$ret = " " . $text;
// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
// xxxx can only be alpha characters.
// yyyy is anything up to the first space, newline, or comma.
$ret = preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i", "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>", $ret);
// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
// Must contain at least 2 dots. xxxx contains either alphanum, or "-"
// yyyy contains either alphanum, "-", or "."
// zzzz is optional.. will contain everything up to the first space, newline, or comma.
// This is slightly restrictive - it's not going to match stuff like "forums.foo.com"
// This is to keep it from getting annoying and matching stuff that's not meant to be a link.
$ret = preg_replace("#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)?)#i", "\\1<a href=\"http://www.\\2.\\3\\4\" target=\"_blank\">www.\\2.\\3\\4</a>", $ret);
// matches an email@domain type address at the start of a line, or after a space.
// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
$ret = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
// Remove our padding..
$ret = substr($ret, 1);
return($ret);
}
Code: Alles auswählen
echo (make_clickable("dies ist ein Link auf http://www.feltel.de"));
Code: Alles auswählen
$msg = "dies ist ein Link auf http://www.feltel.de";
echo (make_clickable($msg));
Code: Alles auswählen
$msg = readfile('irgendeintextfile');
echo (make_clickable($msg));