如何将标签文本转换为标签超链接


How to convert hashtag text into a hashtag hyperlink?

我使用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>

如何修改正则表达式以创建这些结果?

以下是@faileN:建议的使用preg_replace_callback的示例

演示链接

$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);