• 13-02-2023, 10:14:03
    #1
    Merhabalar. Aşağıdaki gibi veri tabanımdan gelen bir değer var.
    Php ile nasıl sadece başlıkları ekrana bastırtabilirim?
    <h1>B1</h1>
    <h2>B2</h2>
    <h3>B3</h3>
    <h4>B4</h4>
    <h5>B5</h5>
    <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>
  • 13-02-2023, 10:28:57
    #2
    <?php
    $string = '<h1>B1</h1><h2>B2</h2><h3>B3</h3><h4>B4</h4><h5>B5</h5><p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>';
    
    preg_match_all('/<h[1-5]>(.*?)<\/h[1-5]>/', $string, $matches);
    
    foreach($matches[1] as $title) {
        echo $title . "<br>";
    }
    ?>
    db den gelen veriyi string olarak düşünürsen preg_match_all ile h1-h5 tüm etiketleri bulur bulunan başlıkları matches[1] de saklar . Döngü yardımı ile hepsini sıralı şekilde ekrana basar. Bu sıradan bir örnek tam olarak sorununun çözülmesi için daha detaylı bilgi vermelisin bence
  • 13-02-2023, 10:30:24
    #3
    Merhaba hocam aklıma gelen ilk yöntem preg_match_all oldu.

    örnek kod:

    function deger_al($tag, $deger){
    $tag_s = "<".$tag.">";
    $tag_3 = "</".$tag.">";
    
    preg_match_all("@$tag_s(.*?)$tag_3@si",$deger,$ret_deger);
    return $ret_deger[1][0];
    }
    
    $gelen_deger = '<h1>B1</h1>
    <h2>B2</h2>
    <h3>B3</h3>
    <h4>B4</h4>
    <h5>B5</h5>
    <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>';
    
    echo deger_al("h2", $gelen_deger);
  • 13-02-2023, 10:32:56
    #4
    xidecn adlı üyeden alıntı: mesajı görüntüle
    <?php
    $string = '<h1>B1</h1><h2>B2</h2><h3>B3</h3><h4>B4</h4><h5>B5</h5><p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>';
    
    preg_match_all('/<h[1-5]>(.*?)<\/h[1-5]>/', $string, $matches);
    
    foreach($matches[1] as $title) {
        echo $title . "<br>";
    }
    ?>
    db den gelen veriyi string olarak düşünürsen preg_match_all ile h1-h5 tüm etiketleri bulur bulunan başlıkları matches[1] de saklar . Döngü yardımı ile hepsini sıralı şekilde ekrana basar. Bu sıradan bir örnek tam olarak sorununun çözülmesi için daha detaylı bilgi vermelisin bence
    Merhaba. Sayende sorunum çözdüldü. Ben <h[1-5]>(.*?)</h[1-5]> bu satırı bu şekilde yapmayı bilmediğimden bütün elemanları ayrı ayrı seçtrip değişkenlere atadım. Bir tık zahmetli oldu. Senin sayende kurtuldum!
    // benim yaptığım
    $baslik1 = preg_match('/<h1>(.*?)<\/h1>/s', $content, $cikti1);
    $baslik2 = preg_match('/<h2>(.*?)<\/h2>/s', $content, $cikti2);
    $baslik3 = preg_match('/<h3>(.*?)<\/h3>/s', $content, $cikti3);
    $baslik4 = preg_match('/<h4>(.*?)<\/h4>/s', $content, $cikti4);
    $baslik5 = preg_match('/<h5>(.*?)<\/h5>/s', $content, $cikti5);
    $baslik6 = preg_match('/<h6>(.*?)<\/h6>/s', $content, $cikti6);
  • 13-02-2023, 10:33:46
    #5
    ozanx07 adlı üyeden alıntı: mesajı görüntüle
    Merhaba hocam aklıma gelen ilk yöntem preg_match_all oldu.

    örnek kod:

    function deger_al($tag, $deger){
    $tag_s = "<".$tag.">";
    $tag_3 = "</".$tag.">";
    
    preg_match_all("@$tag_s(.*?)$tag_3@si",$deger,$ret_deger);
    return $ret_deger[1][0];
    }
    
    $gelen_deger = '<h1>B1</h1>
    <h2>B2</h2>
    <h3>B3</h3>
    <h4>B4</h4>
    <h5>B5</h5>
    <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>';
    
    echo deger_al("h2", $gelen_deger);
    Yardımın için teşekkürler. Sorunumu @xidecn: çözdü!
  • 13-02-2023, 10:43:25
    #6
    https://github.com/kangjeki/DomHTML bunu veya farklı parçalayıcı kullanarak daha pratik bir şekilde html elemanını seçebilirsiniz.
  • 13-02-2023, 10:44:32
    #7
    baguvix adlı üyeden alıntı: mesajı görüntüle
    https://github.com/kangjeki/DomHTML bunu veya farklı parçalayıcı kullanarak daha pratik bir şekilde html elemanını seçebilirsiniz.
    Teşekkürler!
  • 13-02-2023, 11:50:57
    #8
    iltu33 adlı üyeden alıntı: mesajı görüntüle
    Merhaba. Sayende sorunum çözdüldü. Ben &lt;h[1-5]&gt;(.*?)&lt;/h[1-5]&gt; bu satırı bu şekilde yapmayı bilmediğimden bütün elemanları ayrı ayrı seçtrip değişkenlere atadım. Bir tık zahmetli oldu. Senin sayende kurtuldum!
    // benim yaptığım
    $baslik1 = preg_match('/&lt;h1&gt;(.*?)&lt;\/h1&gt;/s', $content, $cikti1);
    $baslik2 = preg_match('/&lt;h2&gt;(.*?)&lt;\/h2&gt;/s', $content, $cikti2);
    $baslik3 = preg_match('/&lt;h3&gt;(.*?)&lt;\/h3&gt;/s', $content, $cikti3);
    $baslik4 = preg_match('/&lt;h4&gt;(.*?)&lt;\/h4&gt;/s', $content, $cikti4);
    $baslik5 = preg_match('/&lt;h5&gt;(.*?)&lt;\/h5&gt;/s', $content, $cikti5);
    $baslik6 = preg_match('/&lt;h6&gt;(.*?)&lt;\/h6&gt;/s', $content, $cikti6);
    İşine yaradıysa ne mutlu, kolay gelsin hocam

    baguvix adlı üyeden alıntı: mesajı görüntüle
    https://github.com/kangjeki/DomHTML bunu veya farklı parçalayıcı kullanarak daha pratik bir şekilde html elemanını seçebilirsiniz.
    Arkadaşın paylaştığı yöntem de kullanılabilir, Eğer veri düzenli olarak güncelleniyor veya düzenli olmayan bir şekilde yapılandırılmışsa, DOMDocument sınıfı ile yapılan çözüm daha esnek ve güvenli olabilir çünkü bu sınıf HTML verilerini doğru şekilde yapılandırır ve bu verileri kullanmak için gereken fonksiyonlar sunar. Fakat veri düzenli olarak güncellenmiyor ve düzenli bir şekilde yapılandırılmışsa, preg_match_all fonksiyonu ile yapılan çözüm hızlı ve etkileşimli olabilir. DOMDocument ile çözümlenmiş halini de paylaşayım
    <?php
    $string = '<h1>B1</h1><h2>B2</h2><h3>B3</h3><h4>B4</h4><h5>B5</h5><p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>';
    
    $doc = new DOMDocument();
    $doc->loadHTML($string);
    
    $headers = $doc->getElementsByTagName('h1')->item(0)->nodeValue;
    
    for ($i = 0; $i < $headers->length; $i++) {
        $header = $headers->item($i);
        echo $header->nodeValue . "<br>";
    }
    ?>
    DOMDocument sınıfını kullanır ve loadHTML fonksiyonu ile veriyi HTML olarak yükler. Daha sonra, getElementsByTagName fonksiyonu ile başlıkları (h1-h5) bulur ve döngü ile her bir başlığı ekrana basar.