twitter nicks

format text with format "@format" to link

 <?php
/** parseTwitterNicks
 *
 * convert text with format "@foo" to link
 *
 * @author Jonathan Andres
 * @param string $str string with twitter nicks
 * @param mixed string|array $allowed list of nicks allowed
 * @param string $format template for link
 * @param bool $toArray return matches as array or string
 * @return mixed string|array
 */
function parseTwitterNicks($str, $allowed = 'all', $format = 'default', $toArray = false){

// capture all nicks with format @tweetnick
preg_match_all('~@([a-z0-9-_]+)~is', $str, $match);

// check template
if($format == 'default')
    $format = 'profile.php?user={nick}';

if(!preg_match('~\{nick\}~', $format))
    $format = $format . '{nick}';

// have matches?
if(empty($match[1]))
    return ($toArray ? array() : $str);

// save matches
$found = array();

// replace matches
foreach($match[1] as $nick){
    // ignore disallowed nicks
    if(!empty($allowed) && $allowed != 'all'){
        if(is_array($allowed)){
            if(!in_array($nick, $allowed))
                continue;
        }
    }
    
    // text to link
    $url = str_replace('{nick}', $nick, $format);
    $str = str_replace('@' . $nick, '<a href="' . $url . '" title="' . $nick . '">@' . $nick . '</a>', $str);
    $found[] = $nick;
}

return ($toArray ? $found : $str);

/*
A basic example:
-----------------
$string = 'hello friends, I\'m listening @daftPunk and you?';
echo parseTwitterNicks($string, 'all');

return: hello my friends, I'm listening <a href="profile.php?user=daftPunk" title="daftPunk">@daftPunk</a> and you?



define template:
-----------------
$string = 'hello friends, I\'m listening @daftPunk and you?';
echo parseTwitterNicks($string, 'all', 'http://www.phpsnaps.com/?user={nick}');

return: hello my friends, I'm listening <a href="http://www.phpsnaps.com/?user=daftPunk" title="daftPunk">@daftPunk</a> and you?



return array with matches:
--------------------------
$string = 'hello my friends, I\'m listening @daftPunk, @dubstep music @skrillex and you?';
$matches = parseTwitterNicks($string, 'all', '', true);
print_r($matches);

return: Array ( [0] => daftPunk [1] => dubstep [2] => skrillex )
*/

}

?>

Usage

[ => <
] => >

A basic example:
-----------------

$string = 'hello friends, I\'m listening @daftPunk and you?';
echo parseTwitterNicks($string, 'all');

return: hello my friends, I'm listening [a href="profile.php?user=daftPunk" title="daftPunk"]@daftPunk[/a] and you?




define template:
-----------------

$string = 'hello friends, I\'m listening @daftPunk and you?';
echo parseTwitterNicks($string, 'all', 'http://www.phpsnaps.com/?user={nick}');

return: hello my friends, I'm listening [a href="http://www.phpsnaps.com/?user=daftPunk" title="daftPunk"]@daftPunk[/a] and you?




return array with matches:
--------------------------

$string = 'hello my friends, I\'m listening @daftPunk, @dubstep music @skrillex and you?';
$matches = parseTwitterNicks($string, 'all', '', true);

print_r($matches);

return: Array ( [0] => daftPunk [1] => dubstep [2] => skrillex )


Comments

Add your comment