我在 PHP 变量中有一个 HTML 代码,我需要替换包含在另一个具有
"obfuscate"
类的标签中的每个链接,例如:
<div class="obfuscate foobar">
<strong>
<a href="https://example.com" class="randomclass" target="_BLANK">test</a>
</strong>
</div>
我需要将
<a>
标签替换为 <span>
,它继承了原始标签的所有内容,添加了 "akn-obf-link"
类,并在 base64_encode()
属性下通过 "data-o"
传递了混淆链接,以及一个"data-b"
属性具有值 "1"
如果链接有一个目标 _blank 或 "0"
否则。
在上面的例子中,
<a>
标签应该转换为:
<span class="akn-obf-link randomclass" data-o="aHR0cHM6Ly9leGFtcGxlLmNvbQ==" data-b="1">test</span>
我已经有一个代码可以在
<a>
标签本身具有 "obfuscate"
类时执行此操作,如果这可能有帮助的话:
$result = preg_replace_callback('#<a[^>]+((?<=\s)href=(\"|\')([^\"\']*)(\'|\")[^>]+(?<=\s)class=(\"|\')[^\'\"]*(?<!\w|-)obfuscate(?!\w|-)[^\'\"]*(\"|\')|(?<=\s)class=(\"|\')[^\'\"]*(?<!\w|-)obfuscate(?!\w|-)[^\'\"]*(\"|\')[^>]+(?<=\s)href=(\"|\')([^\"\']*)(\'|\"))[^>]*>(.*)<\/a>#miUs', function($matches) {
preg_match('#<a[^>]+(?<=\s)class=[\"|\\\']([^\\\'\"]+)[\"|\\\']#imUs',$matches[0],$matches_classes);
$classes = trim(preg_replace('/\s+/',' ',str_replace('obfuscate','',$matches_classes[1])));
return '<span class="akn-obf-link'.($classes?' '.$classes:'').'" data-o="'.base64_encode($matches[3]?:$matches[10]).'" data-b="'.((strpos(strtolower($matches[0]),'_blank')!==false)?'1':'0').'">'.$matches[12].'</span>';
}, $code);
我需要相同的但只要标签在另一个具有
"obfuscate"
类的标签中。