Как преобразовать текст хэштега в гиперссылку с хэштегом?
Я использую php preg_replace()
для преобразования любых слов, перед которыми есть символ хэштега, в гиперссылки.
Таким образом, что-то вроде: #austin
станет: <a href="/tag/austin">#austin</a>
Вот мое регулярное выражение.
preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', $text);
Моя проблема заключается в следующем: если есть какие-либо заглавные буквы, значение href сохранит их, но я хочу, чтобы значение href всегда было полностью в нижнем регистре.
Ввод: #Austin
Не должно становиться: <a href="/tag/Austin">#Austin</a>
Это должно стать:<a href="/tag/austin">#Austin</a>
Как я мог изменить мое регулярное выражение, чтобы создать эти результаты?
4 answers
Вот пример использования preg_replace_callback
, как предложил @Failen:
$string = '#Austin';
function hashtag_to_link($matches)
{
return '<a href="/tag/' . strtolower($matches[1]) . '">' . $matches[0] . '</a>';
}
echo preg_replace_callback('/\B#(\w*[a-z_]+\w*)/i', 'hashtag_to_link', $string);
// output: <a href="/tag/austin">#Austin</a>
Попробуйте это:
preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', strtolower($text));
Это заставит объект ($text
) быть в нижнем регистре до проверки регулярного выражения.
Вы можете достичь этого с помощью preg_replace_callback
: http://de2.php.net/manual/en/function.preg-replace-callback.php
Теоретически вы можете использовать модификатор e
, который позволяет использовать функции PHP в строке замены:
preg_replace('/\B#(\w*[A-Za-z_]+\w*)/e', "'<a href=\"/tag/'.strtolower('$1').'\">$0</a>'", $text);