【问题标题】:PHP: Wrap links from string between <a> </a> tags [duplicate]PHP:在<a> </a>标签之间包装来自字符串的链接[重复]
【发布时间】:2013-06-02 19:26:37
【问题描述】:

我有这个 PHP 代码:

$y = $_POST['message'];

$pre = htmlspecialchars($y, ENT_QUOTES);

$msg = str_replace("&lt;br&gt;", "<br>", $pre);

这会将所有转换后的
的 (<b>) 替换回
。我正在尝试对所有链接做同样的(嗯,几乎),有点像在论坛中。示例...

http://www.example.com

应该像这样缠绕:

<a href="http://www.example.com">http://www.example.com</a>

如果它更容易,我显然更喜欢 [URL] [/URL] 方法,同样,[IMG] [/IMG]。

有人能指出我正确的方向吗?我在这里找了几个小时,没有任何东西可以满足我的需要:/

【问题讨论】:

标签: php url hyperlink str-replace htmlspecialchars


【解决方案1】:

一个非常简单的方法:

$input = '[URL]xxx[/URL]';

$url = explode('[URL]', $input);
$url = explode('[/URL]', $url[1]);
$url = '<a href="' . $url[0] . '"/>Link</a>';

echo $url;

肯定有更好的方法来做到这一点。也许使用正则表达式或 preg_replace。

【讨论】:

  • 太棒了!谢谢!完美运行!我可以将它与图像一起使用!非常感谢!
  • :) 但永远不要忘记安全!你永远不知道用户会输入什么;)
【解决方案2】:

这通常使用正则表达式来完成,您可以在其中 google 链接正则表达式,您将获得大量示例和教程。但是,如果 $_POST['message'] 不是一个巨大的字符串并且不包含很多链接,您实际上可以在 [URL] 上展开,然后在 explode() 的数组结果中找到 [/URL] 并计算链接长度。从那里您只需要附加锚标记并 substr 链接,因为您已经知道原始数组元素的长度。

【讨论】:

  • 这不是一个巨大的字符串,但无论哪种方式,我都不知道如何将其限制为少量字符(500,ex):S(在PHP方面,因为我可以验证它很容易用JavaScript)。而且我自己在 PHP 领域也不是一个出色的编码员,所以我将采用 Patrick Browers 所做的汗水小可爱示例 :)
  • 这基本上是我的建议,但用代码代替 :D 如果你选择这样做也没关系,但你应该意识到它效率极低,不应该与大量文本或大量请求。祝你好运! :P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2011-09-15
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多