Я создал функцию PHP, которая автоматически превратит URL-адреса в ссылки, свяжет Twitter @reply
имена пользователей в своем профиле Twitter и превратит адреса электронной почты в ссылки на протокол mailto
.Функция автоматической ссылки не работает должным образом
Вот сценарий:
function autolink($a, $b){
$e = "";
$f = array(
'link' => '~(http(s|)\:\/\/(www\.|)((\w+)\.(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}|(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}))((((\/|)\w+)(\.[a-z]{2,5}|))+)(\?(\w+\=\w+(\&|))+|)~',
'email' => '~\w+\@\w+(\:[0-9]{2,5}|)\.[a-z]{2,5}~',
'twitter' => '~\@([a-zA-Z_0-9]){1,15}~'
);
switch ($b) {
case "link":$e = preg_replace_callback($f['link'], function ($a) {return '<a href="'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
case "email":$e = preg_replace_callback($f['email'], function ($a) {return '<a href="mailto:'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
case "twitter":$e = preg_replace_callback($f['twitter'], function ($a) {return '<a href="https://twitter.com/#!/'.str_replace('@','',$a).'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
}
return $e;
}
Единственная проблема у меня в том, что вместо того, чтобы вернуться по ссылке возвращает слово: «Array».
Например, это:
autolink("This is my site http://weebuild.biz", "link");
возвращается это:
Это мой сайт Массив
Когда следует возвращать:
Это мой сайт
<a href="http://weebuild.biz" rel="nofollow" target="_blank">http://weebuild.biz</a>
Оригинальный сценарий был в Javasript, который я написал, а также: http://jsfiddle.net/shawn31313/umgqR/2/
Поскольку я не разработчик PHP версии JavaScript имеет некоторые дополнительные функции.
Возможно, проблема в том, что я принял регулярное выражение из JavaScript и просто поместил его в PHP. Я не уверен, что регулярные выражения на PHP отличаются от JavaScript.
Заранее благодарен.
Спасибо, что просто попробуйте изменить все $ a на $ a [0]. Кажется, что это единственное изменение. – Shawn31313
Правильно, просто '$ a' =>' $ a [0] '. Я просто отформатировал ответ, чтобы быть более читаемым. – sberry