【发布时间】:2018-09-28 06:12:03
【问题描述】:
我想将所有指向base64 的链接编码,但正则表达式模式未按预期工作。
这是我的代码:
$html = 'ahsgdjagshjdgasjdgajgsd gjagdjhagsjhgda sgdhjagsjdgajhgdjad<a href="http://short.awsubs.co/be9Vk">Solidfiles</a> jashd sha7st7atsdgasgda sgahsfd ahgsfafd<a href=https://link.safelinkconverter.com/review.php?id=aHR0cDovL2JfdC5seS8ySDdMajh3&c=1&user=61942 rel=nofollow>Zippyshare</a>';
$text = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@';
echo $result = preg_replace_callback($text, function($matches) {
return '<a href="'.base64_encode($matches[1]).'">'.$matches[2].'</a>';
}, $html);
我读过这个帖子,建议使用preg_replace_callback() 对href 值进行编码:
【问题讨论】:
-
通过陈述您想要的确切输出来完成您的问题很重要。此外,如果您尝试解析 html,我们建议您推荐 DomDocument 或类似的工具,而不是正则表达式,因为正则表达式通常不太适合。
-
第一组和第二组应该是什么?您当前的代码有 7 个组
-
@mickmackusa 如果我使用 domdocument 我知道它只打印我在属性中设置的内容等,但我想要的是找到所有链接,然后用我不想的 base64 编码/解码替换它删除字符串。我认为最好的方法是使用正则表达式。如果你有另一种方式让我知道,所以我可以了解更多。对不起我的英语。
标签: php regex encoding href preg-replace-callback