Çapa'nın URL içeriyorsa şerit, içerikleri aşağı çapa

2 Cevap php

Herkes Çapa'nın href niteliği, belirli bir metni içeriyorsa, içeriğini bir çapa atmak için PHP regex işlevi biliyor mu?

Örneğin, bir HTML sayfası var ve bağlantıları boyunca vardır. Ama URL "yahoo" içeren çapa şerit istiyorum. Yani <a href="http://pages.yahoo.com/page1">Example page</a> olacak: Örnek, "yahoo" içeren değil HTML diğer çapalar yalnız bıraktı olacağını ise.

2 Cevap

İlk olarak, bu düzenli ifade sorun değildir (ya da en azından bu olmamalıdır). PHP bu yüzden strongly bu kullanmanızı tavsiye ediyorum bir HTML çözümleyici ile birlikte geliyor.

Eğer sadece tüm bağlantı etiketlerine döngü gerektiğini kullandığınızda, href niteliğini kontrol edin ve gerekirse geri HTML kaydedin daha sonra değiştirebilirsiniz. Örneğin:

$dom = new DOMDocument;
$dom->loadHTML($html); // $html as a string
$anchors = $dom->getElementsByTagName('a');
for ($i=0; i<$anchors->length; $i++) {
  $item = $anchors->item[$i];
  $href = $item->getAttribute('href');
  $host = parse_url($href, PHP_URL_HOST);
  if (stripos($host, 'yahoo') !== false) {
    $item->parentNode->removeChild($item);
  }
}
$html = $dom->saveHTML();

Kullanımı parse_url() burada isteğe bağlıdır. Öznitelik değeri sadece bilgisayar adını çekerek olmadan herhangi bir yerde içinde "yahoo" olsaydı sadece kontrol edebilir.

Bu aynı sorun için herhangi bir regex tabanlı çözüm daha significantly daha iyi ve daha sağlamdır.

Bu fonksiyonu deneyin.

public function stripAnchorTags($html, $ignore_host = false, $charset="UTF-8"){
        $dom = new DOMDocument;
        $dom->loadHTML('<?xml version="1.0" encoding="'.$charset.'"?>'.$html); // $html as a string
        $anchors = $dom->getElementsByTagName('a');
        $length = $anchors->length;
        for($i=0; $i<$length; $i++){
            $item = $anchors->item(0);
            $href = $item->getAttribute('href');
            $host = parse_url($href, PHP_URL_HOST);
            if(!$ignore_host || stripos($host, $ignore_host) === false) {
                $item->parentNode->replaceChild($dom->createTextNode($href),$item);
            }
        }
        return preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveXML($dom->documentElement)));
    }

Bu stripAnchorTags ($ html) gibi kullanabilirsiniz;

Eğer yahoo bağlantıları görmezden istiyorsanız bu stripAnchorTags ($ html, "yahoo") gibi diyoruz;