Changeset 6449

Show
Ignore:
Timestamp:
12/21/07 03:14:22 (7 months ago)
Author:
ryan
Message:

Be more selective in what we make clickable.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wp-includes/formatting.php

    r6409 r6449  
    627627} 
    628628 
     629function _make_url_clickable_cb($matches) { 
     630    $url = $matches[2]; 
     631    $url = clean_url($url); 
     632    if ( empty($url) ) 
     633        return $matches[0]; 
     634        error_log($matches[0], 0); 
     635    return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>"; 
     636} 
     637 
     638function _make_web_ftp_clickable_cb($matches) { 
     639    $dest = $matches[2]; 
     640    $dest = 'http://' . $dest; 
     641    $dest = clean_url($dest); 
     642    if ( empty($dest) ) 
     643        return $matches[0]; 
     644 
     645    return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>"; 
     646} 
     647 
     648function _make_email_clickable_cb($matches) { 
     649    $email = $matches[2] . '@' . $matches[3]; 
     650    return $matches[1] . "<a href=\"mailto:$email\">$email</a>"; 
     651} 
     652 
    629653function make_clickable($ret) { 
    630654    $ret = ' ' . $ret; 
    631655    // in testing, using arrays here was found to be faster 
    632     $ret = preg_replace( 
    633         array( 
    634             '#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', 
    635             '#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', 
    636             '#([\s>])([a-z0-9\-_.]+)@([^,< \n\r]+)#i'), 
    637         array( 
    638             '$1<a href="$2" rel="nofollow">$2</a>', 
    639             '$1<a href="http://$2" rel="nofollow">$2</a>', 
    640             '$1<a href="mailto:$2@$3">$2@$3</a>'),$ret); 
     656    $ret = preg_replace_callback('#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_url_clickable_cb', $ret); 
     657    $ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_web_ftp_clickable_cb', $ret); 
     658    $ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret); 
    641659    // this one is not in an array because we need it to run last, for cleanup of accidental links within links 
    642660    $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);