将 URL 转换为 HTML 中的超链接,而不替换 src 属性值

问题描述 投票:0回答:2

我正在尝试转换 URL,但如果它们位于 src=" 之后则不会。到目前为止,我有这个...

return preg_replace('@(?!^src=")(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $s);

它会转换 URL,但即使它是之前的

src="

php regex hyperlink html-parsing preg-replace
2个回答
2
投票

使其成为背后断言。

(?<!^src=")

0
投票

我必须在没有最小可验证示例的情况下推断出此任务的意图。

通过利用合法的 DOM 解析器,您可以在很大程度上防止匹配包含其他合格 URL 值的非文本节点。

下面使用 XPath 查询来防止匹配已经是

<a>
标签子级的 URL 值。 仅针对
text()
,无法替换标签属性值。

接下来是循环文本节点时的一些巧妙的魔法。

使用

preg_match_all()
隔离每个文本节点中的一个或多个节点 URL,然后创建一个新的
<a>
元素来替换文本的相应 URL 段。

使用

splitText()
“吐出”URL 之前的文本前导部分——它将成为当前节点之前的新节点。

使用

replace_child()
将剩余文本替换为新的
<a>
节点。

使用

insertBefore()
将最初位于 URL 文本后面的文本作为新文本节点添加到前面。

© www.soinside.com 2019 - 2024. All rights reserved.