• 14-02-2023, 09:35:37
    #1
    Merhabalar. Hatamı söylemeden önce yaptığım işlemi özetleyeyim.
    $content değişkenimden tüm konum geliyor.
    preg_match_all ile $content değerimden gelen baslıkları alıp foreach ile yazdırıyorum.
    <?php
    preg_match_all('/<h[1-6]>(.*?)<\/h[1-6]>/', $content, $cikti);
    
    foreach($cikti[1] as $title) {
    echo '<a href="#'.seo($title).'" onclick="goAnchor('.seo($title).')">'.$title.'</a>' . "<br>";
    }
    ?>
    Daha sonra bir foreach daha açıp gelen başlıklara str_replace ile bir id tanımlıyorum ve bunu geri $content değişkenime atıyorum ki hem yazılar gelsin, hem gelen başlıklar id'ye sahip olsun.
    <?php
    
    foreach($cikti[1] as $title) {
    $content = str_replace('<h1>', '<h1 id="' . seo($title) . '">' . $title . '</h1>', $content);
    $content = str_replace('<h2>', '<h2 id="' . seo($title) . '">' . $title . '</h2>', $content);
    $content = str_replace('<h3>', '<h3 id="' . seo($title) . '">' . $title . '</h3>', $content);
    $content = str_replace('<h4>', '<h4 id="' . seo($title) . '">' . $title . '</h4>', $content);
    $content = str_replace('<h5>', '<h5 id="' . seo($title) . '">' . $title . '</h5>', $content);
    $content = str_replace('<h6>', '<h6 id="' . seo($title) . '">' . $title . '</h6>', $content);
    }
    ?>
    <?php echo $content; ?>
    Fakat yanlış yazdırıyor.
    Ben şu şekilde bir ekleme yapıyorum:

    Bana sunduğu çıktı:

    Neden olabilir? Hatam nerede olabilir?
  • 14-02-2023, 09:44:34
    #2
    Çıktının html kodlarını atarsanız yardımcı olabilirim.
  • 14-02-2023, 09:48:45
    #3
    Merhaba, günaydın.
    str_replace fonksiyonunda search parametresi olarak(ilk param.) "<hX>" değerini aratıyorsunuz ve bunu başlığın tamamıyla değiştiriyorsunuz. Yani aslında;
    Bu şekilde olan HTML çıktısı
    <h1>Selam!</h1>
    Muhtemelen bu şekilde dönüyor:
    <h1 id="' . seo($title) . '">' . $title . '</h1>Selam!</h1>
    str_replace fonksiyonunda tüm elementi değiştirmek istiyorsanız search param. olarak tüm elementin içeriğini girmeniz gerekecek. Sadece <h1> olarak arattığınızda 2. parametre (replace) olarak gönderdiğiniz değer sadece <h1> yerine basılır.
    Keyifli çalışmalar.
  • 14-02-2023, 09:49:57
    #4
    baguvix adlı üyeden alıntı: mesajı görüntüle
    Çıktının html kodlarını atarsanız yardımcı olabilirim.
    Elbette. HTML çıktısı şu şekilde.
    Normal görünümü:

    İçerikte ne var kısmının HTML'i
    <div id="toc"><strong>İçerikte Neler Var?</strong>
                                    <a href="#baslik1" onclick="goAnchor(baslik1)">Başlık1</a><br><a href="#baslik2" onclick="goAnchor(baslik2)">başlık2</a><br><a href="#baslik3" onclick="goAnchor(baslik3)">başlık3</a><br>                            </div>
    İçeriğin HTML'i
    <div >
                                    
                                    <h1 id="baslik1">Başlık1</h1>Başlık1
    <h2 id="baslik1">Başlık1</h2>başlık2
    <h3 id="baslik1">Başlık1</h3>başlık3
    <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>                          
    
    </div>
  • 14-02-2023, 10:13:13
    #5
    Luadex IT adlı üyeden alıntı: mesajı görüntüle
    Merhaba, günaydın.
    str_replace fonksiyonunda search parametresi olarak(ilk param.) "<hX>" değerini aratıyorsunuz ve bunu başlığın tamamıyla değiştiriyorsunuz. Yani aslında;
    Bu şekilde olan HTML çıktısı
    <h1>Selam!</h1>
    Muhtemelen bu şekilde dönüyor:
    <h1 id="' . seo($title) . '">' . $title . '</h1>Selam!</h1>
    str_replace fonksiyonunda tüm elementi değiştirmek istiyorsanız search param. olarak tüm elementin içeriğini girmeniz gerekecek. Sadece <h1> olarak arattığınızda 2. parametre (replace) olarak gönderdiğiniz değer sadece <h1> yerine basılır.
    Keyifli çalışmalar.
    Merhabalar günaydın.
    Yani benim yapmam gereken bütün h'lere ayrı tanımlama yapmak olacaktır. Doğru mudur?
  • 14-02-2023, 10:14:34
    #6
    iltu33 adlı üyeden alıntı: mesajı görüntüle
    Merhabalar günaydın.
    Yani benim yapmam gereken bütün h'lere ayrı tanımlama yapmak olacaktır. Doğru mudur?
    Kod yapınıza göre bu durum değişkenlik gösterebilir fakat evet diyebiliriz. Tamamen bir h satırını değiştirmek istiyorsanız bunu str_replace fonksiyonunda '<h1></h1>' olarak aratabilirsiniz.
  • 14-02-2023, 10:16:27
    #7
    Luadex IT adlı üyeden alıntı: mesajı görüntüle
    Kod yapınıza göre bu durum değişkenlik gösterebilir fakat evet diyebiliriz. Tamamen bir h satırını değiştirmek istiyorsanız bunu str_replace fonksiyonunda '<h1></h1>' olarak aratabilirsiniz.
    Merhabalar. Acaba küçük bir örnek atabilme şansınız var mıdır? Tam olarak mantığını anlayamadım .q
  • 14-02-2023, 10:25:35
    #8
    Tabii. Content yapımızın şöyle olduğunu varsayarsak;
    $content = '<h1>text</h1><h2>another-text</h2>';
    $content = str_replace('<h1>text</h1>', '<h1 id="' . seo($title) . '">' . $title . '</h1>', $content);
    $content = str_replace('<h2>another-text</h2>', '<h2 id="' . seo($title) . '">' . $title . '</h2>', $content);
    bu şekilde str_replace methodunda bir dize ararken h etiketlerinin tamamını aratmalısınız. Sizin gönderdiğiniz kodda etiketin sadece açılışını arattığınızı görüyorum. Bu durumda yukarıdaki örneği baz alırsak
    <h1 id="title">title</h1>text</h1>
    bu şekilde bir çıktı alıyorsunuz gibi görünüyor.
  • 14-02-2023, 10:29:55
    #9
    Hocam replace içinde direkt <h1> aramak yerine regex kullanın. Mantık olarak başlangıcı <h1> olacak içerisindeki tüm karakterler dahil olacak sonunda da <h2> olacak şekilde regexle bir iskelet yapısı oluşturun