удалить теги < a > на определенный URL-адрес домена php [duplicate]

Другой вариант - отказаться от переменной гласного и поместить символ в цикл.

    def anti_vowel(text):
        for i in "aeiouAEIOU":
            text = text.replace(i,"")
        return text

    print anti_vowel("HappIEAOy")
1
задан juan 5 March 2019 в 16:13
поделиться

3 ответа

Вместо того, чтобы пытаться анализировать HTML с помощью регулярных выражений , как вы предложили, я решил вместо этого использовать класс DOMDocument.

function remove_domain($str, $domainsToRemove)
{
    $domainsToRemove = is_array($domainsToRemove) ? $domainsToRemove : array_slice(func_get_args(), 1);

    $dom = new DOMDocument;
    $dom->loadHTML("<div>{$str}</div>", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

    $anchors = $dom->getElementsByTagName('a');
    // Code taken and modified from: http://php.net/manual/en/domnode.replacechild.php#50500
    $i = $anchors->length - 1;
    while ($i > -1) {
        $anchor = $anchors->item($i);

        foreach ($domainsToRemove as $domain) {
            if (strpos($anchor->getAttribute('href'), $domain) !== false) {
                // $new = $dom->createElement('p', $anchor->textContent);
                $new = $dom->createTextNode($anchor->textContent);

                $anchor->parentNode->replaceChild($new, $anchor);
            }
        }

        $i--;
    }

    // Create HTML string, then remove the wrapping div.
    $html = $dom->saveHTML();
    $html = substr($html, 5, strlen($html) - (strlen('</div>') + 1) - strlen('<div>'));

    return $html;
}

Вы можете использовать приведенный выше код в следующих примерах.
Обратите внимание, как вы можете передать строку в качестве домена для удаления, или вы можете передать массив доменов, или вы можете воспользоваться func_get_args и передать бесконечное число параметров.

$str = <<<str
     <a href="https://www.domainurl.com/refer/google-adsense/">fsdf</a>
    <a title="Google Adsense" href="https://www.domainurl.com/refer/google-adsense/" target="_blank" rel="nofollow noopener">fgddf</a>
    <a href="https://www.domainurl.com/page/pago">domain </a>
<a title="Google Adsense" href="https://www.googlead.com/refer/google-adsense/" target="_blank" rel="nofollow noopener">googled</a>
str;

// Example usage
remove_domain($str, 'domainurl.com');
remove_domain($str, 'domainurl.com', 'googlead.com');
remove_domain($str, ['domainurl.com', 'googlead.com']);

Во-первых, я сохранил вашу строку в переменной, но это только для того, чтобы я мог использовать ее для ответа; замените $str тем, откуда вы получите этот код.

Функция loadHTML принимает строку HTML, но требует одного дочернего элемента - поэтому я заключила строку в элемент div.

Цикл while будет перебирать элементы привязки, а затем заменять любые, которые соответствуют указанному домену, только содержимым тегов привязки.
Обратите внимание, я оставил в комментарии над этой строкой, которую вы можете использовать вместо. Это заменит элемент привязки тегом p, который будет иметь стиль по умолчанию display: block;, означающий, что ваш макет вряд ли будет поврежден. Однако, поскольку вы ожидаете вывод только текстовых узлов, я оставил это как опцию.

Живая демо

0
ответ дан JustCarty 5 March 2019 в 16:13
поделиться

Как насчет:

<a.*? href=\".*www\.googlead\.com.*\">(.*?)<\/a>

Так получается:

preg_match_all('{<a.*? href=\".*www\.googlead\.com.*\">(.*?)<\/a>}' , $abcont , $allLinksMatchs);

При этом удаляются только a теги из www.googlead.com.

Вы можете проверить результат регулярного выражения здесь .

0
ответ дан ALFA 5 March 2019 в 16:13
поделиться

Предположим, ваш HTML содержится в переменной для следующего.

Использование preg_replace должно быть лучшим вариантом, вот функция, которая должна вам немного помочь:

function removeLinkTagsOfDomain($html, $domain) {
    // Escape all regex special characters
    $domain = preg_quote($domain);

    // Search for <a> tags with a href attribute containing the specified domain
    $pattern = '/<a .*href=".*' . $domain . '.*".*>(.+)<\/a>/';

    // Final replacement (should be the text node of <a> tags)
    $replacer = '$1';

    return preg_replace($pattern, '$1', $html);
}

// Usage:

$domains = [...];
$html = '...';

foreach ($domains as $d) {
    $html = removeLinkTagsOfDomain($html, $d);
}
0
ответ дан Kévin Bibollet 5 March 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: