Bir html'in elementlerini kolaylıkla ayırt edip düzenlemizi sağlayan Simple Html Dom hazır sınıfı codeigniter ile beraber kullanacağız.

Bir kaç yerde bu sınıfı codeigniter ile kullanmakta zorluk çekenlere rastladım onun için küçük bir örnekle codeigniter ile kullanımını göstermek istedim.

Buradan sınıfı indiriyoruz. İndirdiğiniz dosya içerisinde simple_html_dom.php adlı dosyayı alıp codeigniterin application->library dizini altına kopyalıyoruz.

Controller

Sınıfı test etmek için dom_controller adında bir controller oluşturuyoruz. Bu sınıfı kullanarak code ve pre etiketleri arasında bulunan  (kullanıcının görmesini istediğimiz kodları) özel html karakterlerini ekranda görünecek hale dönüştürelim.

dom_controller.php

class dom_controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }
 
    function index()
    {
        $str = '<pre><img class="fl" src="img/sample.gif" alt="resim"/></pre>';
        echo $this->esc_html($str);
    }
 
    function esc_html()
    {
        $str = '<pre><img class="fl" src="img/sample.gif" alt="resim"/></pre>';
  
        $this->load->library('simple_html_dom');
        $dom =& $this->simple_html_dom;
        $dom->load($str);
  
        $pars = $dom->find('pre,code');//Burada pre ve code etiketlerini seçmesini söyledik
        foreach($pars as $e)
        {
            $e->innertext = htmlspecialchars($e->innertext,ENT_QUOTES, 'UTF-8');
        }
  
        echo $dom->outertext;
    }
}

Daha önce burada özel html karakterlerini dönüştürmeyi anlatmıştım ama sonradan bazı durumlarda o konuda bahsettiğim yöntemin düzgün çalışmadığını farkettim. Bundan dolayı yukarıdaki şekilde kullanmanız daha sağlıklı olacaktır.

Özellikle metinlerde html elementlerini ayrıştırıp işlem yapmak istediğimiz zaman bunu simple html dom parser ile yaparak düzenli ifadelerle uğraşmak zorunda kalmayacağız.

Küçük bir örnek daha yapalım konuyu pekiştirelim. Html metnimizin içerisinde bulunan boş paragrafları kaldıralım. Controller dosyamıza aşağıdaki fonksiyonu da ekleyelim.

function bos_paragraflari_kaldir()
{
    $str = '<p>Dolu paragraf</p><p></p><p>&nbsp;</p>';
  
    $this->load->library('simple_html_dom');
    $dom =& $this->simple_html_dom;
    $dom->load($str);
 
    $pars = $dom->find('p');
    foreach($pars as $e)
    {
        $plain_text = trim($e->plaintext);
        if($plain_text=='' || $plain_text=='&nbsp;')
        {
         $e->outertext = '';
        }
    }
 
    echo $dom->outertext;
}

Çıktımız "<p>Dolu paragraf</p>" olacaktır.