PHP kullanarak HTML dosyası tüm metin ayıklamak nasıl?

5 Cevap php

HTML dosyası tüm metin ayıklamak için nasıl

Ben <, alt öznitelikleri, tüm metin ayıklamak istiyorum p> etiketleri, vb.

Ben stil ve script etiketleri arasındaki metin ayıklamak istemiyorum ancak

Teşekkürler

şimdi ben aşağıdaki kodu var

    <?PHP
    $string =  trim(clean(strtolower(strip_tags($html_content))));
    $arr = explode(" ", $string);
    $count = array_count_values($arr);
    foreach($count as $value => $freq) {
          echo trim ($value)."---".$freq."<br>";
    }

    function clean($in){
           return preg_replace("/[^a-z]+/i", " ", $in);
    }

    ?>

This works great but it retrieves script and style tags which I don't want to retrieve and the other problem I am not sure if it does retrieve attributes like alt - since strip_tags function might remove all HTML tags with their attributes

Teşekkürler

5 Cevap

Ben şahsen bazı tür bir XML okuyucu geçmek gerektiğini düşünüyorum (SimpleXML , Document Object Model or XMLReader ) to parse the HTML document. I'd go for a mix of DOM, SimpleXML ve XPath ne gerek ayıklamak - keyfi belgeleri ayrıştırma zaman everthing başka sefil başarısız olur:

$dom = new DOMDocument();
$dom->loadHTML($html_content); // use DOMDocument because it can load HTML
$xml = simplexml_import_dom($dom); // switch to SimpleXML because it's easier to use.
$pTags = $xml->xpath('/html/body//p');
$tagsWithAltAttribute = $xml->xpath('/html/body//*[@alt]');
// ...

İlk temizleme etiketleri geçerli yolu kullanın, sonra tam içeriği ile script ve style etiketlerini kaldırmak ve metni alırsınız.

Önce sen ve bloklar için arama ve html kaldırabilirsiniz.

i çok kullanırım bu işlevi var

        function search($start,$end,$string, $borders=true){
    		$reg="!".preg_quote($start)."(.*?)".preg_quote($end)."!is";
    		preg_match_all($reg,$string,$matches);

    		if($borders) return $matches[0];	
    		else return $matches[1];	
    	}

fonksiyon dizideki blok eşleme dönecektir.

$array = search("<script>" , "</script>" , $html)

sen gittin script ve stilleri var bir kere, kullanım metni almak için strip_tags

Ayrıştırma her türlü sürece kaynak% 100 iyi biçimlendirilmiş XML (HTML4, tanımı gereği, hangi değil) olduğundan emin olamaz gibi bir seçenek değildir.

Basit preg_replace yeterli olacaktır. Gibi bir şey

preg_replace('/<(script|style).*>.*<\/\1>/i', '', $html);

boş bir dize (yani onları şerit) ile tüm komut dosyası ve stil öğeleri ve bunların içeriğini değiştirmek için yeterli olmalıdır.

XSS saldırıları önlemek istiyorsanız, ancak, muhtemelen HTML normalleştirmek ve sonra tüm kötü kod şerit bir HTML dezenfektan kullanarak daha iyidir.

Ben başka bir mesaja cevap olarak yayınlanan, ama burada yine:

Biz sadece repustate.com yeni bir doğal dil işleme API üzerinde başlattı ettik. REST API (yani sadece kıvrılmasını kullanarak iyi olacak) kullanarak, herhangi bir HTML veya PDF temiz ve geriye sadece metin parçaları alabilirsiniz. Bizim API böylece doya kullanmak için çekinmeyin ücretsizdir. Check it out ve readability.js için sonuçları karşılaştırmak - Ben neredeyse% 100 aynıyız bulacaksınız düşünüyorum.