preg_replace - 仅在被空格包围时匹配

发布于 2024-11-27 22:21:14 字数 534 浏览 0 评论 0原文

这是我现有的代码:

preg_replace("!((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)!i",  "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s);

它需要一个链接并将其转换为 HTML。

问题是有时我会得到一个我不想转换为 HTML 的 URL。例如:

<img src="http://www.domain.com/img.png" />

这样就会变成:

<img src="<a target="_blank" href ...

防止这种情况的最佳方法是什么?我认为仅在空间之间建立链接可能会效果很好。我将如何更改 preg_replace ?

Here's my existing code:

preg_replace("!((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)!i",  "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s);

It takes a link and turns it into HTML.

The problem is that sometimes I get a URL that I don't want to turn into HTML. For example:

<img src="http://www.domain.com/img.png" />

so that would turn into:

<img src="<a target="_blank" href ...

What is the best way to prevent this? I think only taking links between a space might work well. How would I alter the preg_replace?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾其所爱 2024-12-04 22:21:15

您可以使用单词边界 (\b)。

preg_replace("!\b((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)\b!i",  "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s);

尽管我的首选技术是仅在文本节点中搜索,这样您就不必处理序列化的 HTML。

如果您决定解析 HTML,DOMDocument 非常方便。

You could use word boundaries (\b).

preg_replace("!\b((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)\b!i",  "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s);

Though my preferred technique would be to search in text nodes only so you don't ever have to deal with serialised HTML.

If you decide to parse the HTML, DOMDocument is quite handy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文