<?PHP

function link_url$var ){

    
$t parse_url$var );

    
$url "{$t[scheme]}://";
    if( 
$t[user] ){

        
$url .= $t[user];
        if( 
$t[pass] )
            
$url .= ":{$t[pass]}";

        
$url .= "@";

    }
    
$url .= "{$t[host]}";
    
$ret "<a href='{$url}/' target='_blank'>$url</a>";

    
$full_url "";
    if( 
$t[path] ){
        
$full_url .= $t[path];
        if( 
$t[query] ){
            
$full_url .= "?{$t[query]}";
        }
        if( 
$t[fragment] ){
            
$full_url .= "#{$t[fragment]}";
        }
        
$ret .= "<a href='{$url}{$full_url}' target='_blank'>{$full_url}</a>";

    }
    return 
$ret;

}

function 
autolink$str ){

    
// get length
    
$len strlen($str);
    
$start 0;
    
$stat 0;
    
    for( 
$i $i $len $i++ ){

        switch ( 
$stat ){

            
// h
            
case 1:
                if( 
$str[$i] == 't' || $str[$i] == 'T' )
                    
$stat 2;
                else
                    
$stat 0;
                break;

            
// ht | f
            
case 2:
                if( 
$str[$i] == 't' || $str[$i] == 'T')
                    
$stat 3;
                else
                    
$stat 0;
                break;

            
// htt | ft
            
case 3:
                if( 
$str[$i] == 'p' || $str[$i] == 'P' )
                    
$stat 4;
                else
                    
$stat 0;
                break;

            
// http | ftp
            
case 4:
                if( 
$str[$i] == ':' )
                    
$stat 5;
                else
                    
$stat 0;
                break;

            
// http: | ftp:
            
case 5:
                if( 
$str[$i] == '/' )
                    
$stat 6;
                else
                    
$stat 0;
                break;

            
// http:/ | ftp:/
            
case 6:
                if( 
$str[$i] == '/' )
                    
$stat 7;
                else
                    
$stat 0;
                break;

            
// http:// | ftp://
            
case 7:
                if( 
ereg"[[:space:]]"$str[$i], $space ) ){
                    
$url substr($str$start$i-$start);
                    
$ret .= link_url$url ).$space[0];

                    
$start $i+1;
                    
$stat 0;
                }
                break;
                
            
// tag..
            
case 8:
                if( 
$str[$i] == '>' )
                    
$stat 0;
                else if ( 
$str[$i] == '\'' )
                    
$stat 9;
                else if ( 
$str[$i] == '"' )
                    
$stat 10;
                break;

            case 
9:
                if( 
$str[$i] == '\'' )
                    
$stat 8;
                break;
                
            case 
10:
                if( 
$str[$i] == '"' )
                    
$stat 8;
                break;
                
            default:
                if( 
$str[$i] == 'h' || $str[$i] == 'H' ){
                    
$stat 1;
                    
                    
$ret .= substr($str$start$i-$start);
                    
$start $i;
                }
                else if( 
$str[$i] == 'f' || $str[$i] == 'F' ){
                    
$stat 2;
                    
                    
$ret .= substr($str$start$i-$start);
                    
$start $i;
                }
                else if( 
$str[$i] == '<' ){
                    
$stat 8;
                }
        }
        
    }
    
    if( 
$stat == ){
        
$url substr$str$start );
        
$ret .= link_url$url );
    }
    else
        
$ret .= substr$str$start$i-$start );
        
    return 
$ret;
}

?>
<style>
<!--

    #org {
        border-width: 1px;
        border-color: #808080;
        border-style: dotted;

        background-color: #efefef;
        padding: 10px;
        margin-bottom: 40px;
    }

    #after {
        border-width: 1px;
        border-color: #808080;
        border-style: dashed;

        background-color: #efefef;
        padding: 10px;
        margin-bottom: 40px;
    }
    
-->
</style>

<form method="post" action="<?=$PHP_SELF?>">
<textarea name='text' cols='40' rows='10'><?=$_POST[text]?></textarea>
<input type=submit>
</form>

<br><br><br>

<?PHP

    
if( $_POST[text] ){

        
$text autolink$_POST[text] );
        
        echo 
"<div id='org'>\n";
        echo 
"<H3>Original is</H3>";
        echo 
str_replace"\n""<br>\n"$_POST[text] );
        echo 
"</div>\n";

        echo 
"<div id='after'>\n";
        echo 
"<H3>After autolink...</H3>\n";
        echo 
str_replace"\n""<br>\n"$text );
        echo 
"</div>\n";
    }
        
    
show_source(__FILE__);

?>