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

Reply via email to