如果包含指定文本,则将 HTML 超链接更改为纯文本
我有一个包含一些链接的变量。现在我想从已单击的链接中删除 标记,以通知最终用户当前页面。
输入字符串和我的代码:
$links = '<a href="#" onclick="sort_data(\'All\',\'all\')">All</a> | <a href="#" onclick="sort_data(\'Diversified\',\'1\')">Equity</a> | <a href="#" onclick="sort_data(\'Liquid\',\'1\')">Liquid</a> | <a href="#" onclick="sort_data(\'Sector\',\'1\')">Sector</a>';
if (preg_match('/<A HREF="#" onclick="(.*?)>Equity/', $links))
{
echo preg_replace('/<A HREF=(.*?)>Equity/', 'Equity', $links);
}
这将替换 Equity
之前编写的所有内容,而我希望只删除 Equity
的锚标记,并且内部文本应保持原样。
我在这里做错了什么?有更好的方法来做到这一点吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
默认情况下,替换是“贪婪的”,并且匹配第一个“
尝试
/]*?)>Equity/
[^<>]
应将您的选择限制为字符不是尖括号,因此将其限制为单个 href 标记。Replace is by default "greedy" and is matching the first "<A HREF..." all the way through to your last "Equity".
Try
/<A HREF=([^<>]*?)>Equity/
The
[^<>]
should restrict your selection to character that are NOT angle brackets and so restrict it to a single href tag.您应该在不区分大小写标志 href="http://fr.php.net/preg_match" rel="nofollow noreferrer">preg_match 和 preg_replace。
另外 preg_match 只会匹配一个链接,如果您需要替换所有链接 preg_match_all 会更好。
注意:我不知道为什么你要在服务器端这样做,但最好使用 javascript 框架在客户端执行此操作,jquery 非常适合执行此类操作。另外,你最好制作非侵入式javascript,这样确实更便于维护,
you should use the case insensitive flag on preg_match and preg_replace.
Also preg_match would match only one link, if you need to replace all link preg_match_all would be better.
Note: I don't know why you are doing that on server side but might be better to do it on client side with a javascript framework, jquery would be perfect to do such manipulations. Also you have better to make non intrusive javascript that really better for maintenance,
如果您只想摆脱
和
标记,为什么不使用 strip_tags 函数?
If all you want to do is get rid of the
<A HREF=...>
and</A>
tags, why not use the strip_tags function?您的代码中存在多个缺陷:
i
(不区分大小写)选项或更改 reg exp。。
*
将消耗搜索到的链接前面的每个链接。尝试以下操作:
You have multiple flaws in your code:
i
(case insensitive) option or change the reg exp.</a>
.*
will consume every link in front of the searched one.Try this:
假设您的字符串是较大 HTML 字符串的一部分,您可以使用合法的 DOM 解析器来隔离超链接并将其替换为相应的文本。
代码:(演示)
原始输出:
渲染输出:
Assuming your string is part of a larger HTML string, you can use a legitimate DOM parser to isolate and replace the hyperlink with the corresponding text.
CODE: (Demo)
Raw output:
Rendered output: