Как преобразовать текст хэштега в гиперссылку с хэштегом?


Я использую 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>

Как я мог изменить мое регулярное выражение, чтобы создать эти результаты?

Author: mickmackusa, 2011-06-27

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>
 5
Author: Francois Deschenes, 2018-01-30 11:45:37

Попробуйте это:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', strtolower($text));

Это заставит объект ($text) быть в нижнем регистре до проверки регулярного выражения.

 3
Author: David Laberge, 2018-01-30 11:46:27

Вы можете достичь этого с помощью preg_replace_callback: http://de2.php.net/manual/en/function.preg-replace-callback.php

 2
Author: Alex Sawallich, 2011-06-27 16:26:50

Теоретически вы можете использовать модификатор e, который позволяет использовать функции PHP в строке замены:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/e', "'<a href=\"/tag/'.strtolower('$1').'\">$0</a>'", $text);
 1
Author: Karolis, 2011-06-27 17:01:14