PHP + 正则表达式来查找和替换源代码中特定类中的任何 <a> 标签

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

我在 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"
类的标签中。

html regex replace tags
© www.soinside.com 2019 - 2024. All rights reserved.