php function preg_replace ile ilgili soru

5 Cevap php

I want to dynamically remove specific tags and their content from an html file and thought of using preg_replace but can't get the syntax right. Basically it should, for example, do something like : Replace everything between (and including) "" by nothing.

Kimse bana bu konuda lütfen yardımcı olabilir?

5 Cevap

Kolay dostum.

To have a Ungreedy regexpr, use the U modifier And to make it multiline, use the s modifier. Knowing that, to remove all paragraphes use this pattern :

#<p[^>]*>(.*)?</p>#sU

Açıklayın:

  • Ben (daha okunabilir bir desen için) benim \ karakterleri korumak zorunda değil # sınırlayıcı kullanın
  • <p[^>]*>: (gibi bir hipotetik tarzı ile,) bir açılış paragraf tespit parçası
  • (.*)?: ("Ungreedy modu") Herşey
  • </p>: Açıkçası, kapanış paragraf

Bu yardım umut!

Verilerinizi sterilize etmek için çalışıyorsanız, sık sık belirli şart ve etiketleri fişliyor karşıt olarak bir beyaz kullanmanız önerilir. Bu XSS saldırıları sterilize etmek ve önlemek daha kolaydır. Büyük ve biraz yavaş, veri arındırıcı ilgili şaşırtıcı sonuçlara sahip olmasına rağmen HTML Purifier o olarak bilinen bir kütüphane var,.

Ben normal bir ifade ile bunu yapmak için çalışıyoruz değil öneririz. Daha güvenli bir yaklaşım gibi bir şey kullanmak olacaktır

Simple HTML DOM

Simple HTML DOM API Reference: İşte API Başvurusu için link

Başka bir seçenek kullanmak olacaktır DOMDocument

Burada fikir, verileri ayrıştırmak için gerçek bir HTML ayrıştırıcı kullanmak ve daha sonra ağaç üzerinden hareket / hareket ve gereken hangisi elemanları / nitelikleri / metin kaldırabilirsiniz olduğunu. Bu HTML içindeki verileri değiştirmek için normal bir ifade kullanmak için çalışırken çok daha temiz bir yaklaşımdır.

<?php
    $doc = new DOMDocument;
    $doc->loadHTMLFile('blah.html');

    $content       = $doc->documentElement;
    $table         = $content->getElementsByTagName('table')->item(0);
    $delfirstTable = $content->removeChild($table);

    echo $doc->saveHTML();
?>

Eğer etiketleri arasında ne olduğunu bilmiyorsanız, Phill tepkisi çalışmaz.

Bu, başka hiçbir etiketleri arasında varsa çalışmak, ve kesinlikle daha kolay durumda olacaktır. Açıktır ki, ihtiyacınız ne olursa olsun etiketiyle div değiştirebilirsiniz.

preg_replace('#<div>[^<]+</div>#','',$html);

Ortada diğer etiketleri var olabilseydi, bu çalışması gerekir, ancak sorunlara neden olabilir. Bu yüzden eğer, muhtemelen yukarıda DOM çözümü ile gidiş daha iyi

preg_replace('#<div>.+</div>#','',$html);

These aren't tested

SÖZDE KODU

function replaceMe($html_you_want_to_replace,$html_dom) {
   return preg_replace(/^$html_you_want_to_replace/, '', $html_dom);
}

HTML önce

<div>I'm Here</div><div>I'm next</div>

<?php
$html_dom = "<div>I'm Here</div><div>I'm next</div>";
$get_rid_of = "<div>I'm Here</div>";
replaceMe($get_rid_of);
?>

HTML sonra

<div>I'm next</div>

Ben bu kesmek işi biliyor