Içinde satır sonlarını koru

0 Cevap php

Şu anda PHP kullanıyorum ve DOMXPath, bir web sayfasının <p> elemanlarının tüm içeriğini almak için:

<?php
...    
$doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXPath($doc);
$paragraphs = $xpath->evaluate("/html/body//p");

foreach ($paragraphs as $paragraph){
echo $paragraph->textContent . "<br />";
}

Benim sorun olduğunu textContent o <p> elemanları içinde var <br /> etiketleri saygı duymayan kaynaklanan dize. Bunun yerine satır sonu kaldırır ve normalde ayrı satırlarda olacağını cümle iter. Örneğin:

Örnek HTML:

<p>
Some happy talk goes here talking about our great product.<br />
We would love for you to buy it!
</p>

<p>
Random information and what not<br />
Isn't that cool?
</p>

Yukarıdaki PHP Akım Çıkışı:

Some happy talk about our great product.We would love for you to buy it!

Random information and what notIsn't that cool?

I $paragraphs = $doc->getElementsByTagName("p"); de denedim ve bana aynı şeyi verir.

DOMXPath / DOMDocument satır sonlarını korumak yapmak için bir yolu var mı? Ben bir paragraf içinde kelimelerin her ayırmak için gerekiyor ve akım çıkışı o izin vermiyor.

Ayrıca, çok iyi olurdu <br /> ya da '\n' korurken <p> elemanlar içinde dize almak için alternatif bir yöntem ise.

EDIT


Araştırmamız sonucunda söz HTML aslında <br> etiketleri ama hiçbir gerçek satır sonları ile ayrılmış çapa bir listesi:

<p class="home_page_list"><a href="/home/personal-banking/checking/Category-Page-Classic-Checking/classic-checking.html">Classic Checking</a><br> <a href="/home/personal-banking/checking/Category-Page-Interest-Checking/interest-checking.html">Interest Checking</a><br> <a href="/home/personal-banking/checking/Category-Page-Interest-Checking/interest-premium-checking.html">Premium Checking</a><br> <a href="/home/personal-banking/Savings-Category-Page/Basic-Savings-Category-Page/basic-savings.html">Savings Plans</a><br> <a href="/home/personal-banking/Savings-Category-Page/Money-Market-Accounts-Category-Page/money-market-accounts.html">Money Market Accounts</a><br> <a href="/home/personal-banking/Savings-Category-Page/Certificates-of-Deposit-Category-Page/fixed-rate-CD.html">CDs</a><br> <a href="/home/personal-banking/Savings-Category-Page/Individual-Retirement-Account-Category-Page/individual-retirement-account.html">IRAs</a></p>

Bu verilen orijinal HTML ile düzgün çalıştığını çıkıyor.

UPDATE: Solved


Bu çözüldüğünü @ ircmaxell cevabı yardımı ve @ netcoder bıraktığı yorumlarla ve Gordon @, çok şık değil ama şimdi yapacağız.

Örnek:

foreach ($paragraphs as $paragraph){
    $p_text = new DOMDocument();
    $p_text->loadHTML(str_ireplace(array("<br>", "<br />"), "\r\n", DOMinnerHTML($paragraph)));
    //Do whatever, in this case get all of the words in an array.
    $words = explode(" ", str_ireplace(array(",", ".", "&", ":", "-", "\r\n"), " ", $p_text->textContent));
print_r($words);
}

(@ Netcoder tarafından önerilen) Bu daha sonra değerlendirmeye alınabilir "\ r \ n" (@ ircmaxell tarafından önerilen) ile <br> örneklerini değiştirmek için DOMinnerHTML kullanır Mesajı textContent.

Açıkçası orada iyileştirilmesi için bazı oda var, ama benim şimdiki sorunu çözmüştür.

Yardım için herkese teşekkürler,

Ben

0 Cevap