On Wednesday, July 3, 2002, 1:47:05 PM, "Adrian Murphy" wrote:
> whats wrong with this.
> it's getting stuck somewhere
"Somewhere" isn't very helpful. When asking for help be sure to include as much
information as possilble.
Laying out your code so the structure can be seen...
<?php
function urls_clickable($string)
{
for($n=0; $n < strlen($string); $n++)
{
if(strtolower($string[$n]) == 'h')
{
if(!strcmp("http://", strtolower($string[$n]) . strtolower($string[$n+1]) .
strtolower($string[$n+2]) . strtolower($string[$n+3]) . $string[$n+4] . $string[$n+5]
. $string[$n+6]))
{
$startpos = $n;
while($n < strlen($string) && eregi("[a-z0-9\.\:\?\/\~\-\_\&\=\%\+\'\"]",
$string[$n]))
$n++;
if(!eregi("[a-z0-9]", $string[$n-1]))
$n--;
$link = substr($string, $startpos, ($n-$startpos));
$link = $link;
$string_tmp = $string;
$string = substr($string_tmp, 0, $startpos);
$string .= "<a href=\"$link\" target=\"_blank\">$link</a>";
$string .= substr($string_tmp, $n, strlen($string_tmp));
$n = $n + 15;
}
}
}
return $string;
}
$text = "http://www.somewhere.org <br><br>";
echo urls_clickable($text);
?>
It's getting stuck because you're moving the goalposts. It's a very bad idea to
base a loop on a variable that is changed within the loop. I suggest you loop
through one string while building a second string as the return value.
On the other hand, I seem to remember seeing a regex posted on this list
recently that did exactly this. I suggest you search the archives for it
because it would save you a lot of hassle.
--
Stuart
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php