<?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 = 0 ; $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 == 7 ){
$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__);
?>