Php textarea将代码替换为pix,并将链接转换为超链接,最终在textarea中标记用户名

Php textarea将代码替换为pix,并将链接转换为超链接,最终在textarea中标记用户名,php,html,Php,Html,我有一个两难的选择,我正在我的网站上建设,现在在我的帖子上我想做三件事 抓取用户名的标签,我现在不做,但以后再做。 用图像替换代码。 抓取文本区域中的链接并使其成为超链接。 现在2和3的作品完美只是不在一起,最终我希望所有三个在textarea工作。这甚至可以通过将三者结合起来来实现吗?或者我必须采取另一种方法 $textcode=array'[anarchy]'、'O:-'、'X'、'[anon]'、'=D>'、'~X'、';'、':D','>:D您的url匹配有太多可选元素,并且会获取至少

我有一个两难的选择,我正在我的网站上建设,现在在我的帖子上我想做三件事

抓取用户名的标签,我现在不做,但以后再做。 用图像替换代码。 抓取文本区域中的链接并使其成为超链接。 现在2和3的作品完美只是不在一起,最终我希望所有三个在textarea工作。这甚至可以通过将三者结合起来来实现吗?或者我必须采取另一种方法


$textcode=array'[anarchy]'、'O:-'、'X'、'[anon]'、'=D>'、'~X'、';'、':D','>:D您的url匹配有太多可选元素,并且会获取至少部分有效的url的所有内容。这种冲突可能会出现在像problem.gif这样的东西上,因为它将被视为域名

我的建议是根据需要使用空格| start+protocol | www来限制url检测。我假设剩余的正则表达式部分很好,我只是删除了不必要的捕获组,所以它是这样的:

$url = '@\s(?:http(s)?://|(www\.))((?:[a-zA-Z])(?:[-\w]+\.)+(?:[^\s\.]+[^\s]*)+[^,.\s])@';
$newDatas = preg_replace($url, '<a href="http$1://$2$3" target="_blank" title="$2$3">$2$3</a>', $newData);

如果我知道我会在几周后找到答案,我就不会发布这个问题;然而,几天的休息让我重新审视它,我得到了它。谢谢你的帮助。谢谢你的来信


我同意:在str_replace函数中使用表情符号之前,请确保表情符号以适当的方式排序。首先这样做可能可以避免对URL替换的干扰。
$string = ':))';
$x = str_replace([':)', ':))'], ['smiley', 'big-smiley'], $string);