PHP: cómo obtener el texto de varias etiquetas p seguidas

Tengo una variable que contiene algo de html. En el html hay varias etiquetas p una al lado de la otra. Me gustaría recuperar el texto de esas etiquetas p y formatearlas en 1 párrafo y establecer este nuevo párrafo en una nueva variable. ¿Tiene sentido?

<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>

se convierte en:

<p>apple banana grape</p>

NOTA: los elementos en el html pueden variar un poco. Sin iframe por ejemplo. Una imagen en alguna parte, etc.

preguntado el 12 de junio de 12 a las 17:06

Puede eliminar las etiquetas HTML con strip_tags() -

@ orourkrk, ya veo. Mi conocimiento de php es limitado ya que soy un programador final de fuentes, pero comencé a aprender PHP. La página a la que se vinculó tiene varias sugerencias en lugar de expresiones regulares, ¿puede sugerir cuál de ellas es la solución preferida para mi caso? -

2 Respuestas

Puedes usar Xpath para hacer eso

$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';

$doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXpath($doc);

$elements = $xpath->query("//p");
foreach ($elements as $node){
echo $node->nodeValue. "<br/>";
}

Respondido el 12 de junio de 12 a las 17:06

Ejemplo:

$html = '<h2></h2>
  <p>date</p>
  <ul></ul>
  <iframe></iframe>
  <p>apple</p>
  <p>banana</p>
  <p>grape</p>
  <ul></ul>';

if (preg_match_all('~<p>(?P<paragraphs>.*?)</p>~is', $html, $matches)) {
  print_r($matches['paragraphs']);
}

Resultado:

Array
(
    [0] => date
    [1] => apple
    [2] => banana
    [3] => grape
)

PS Votantes negativos "inteligentes", ¿podrían comentar por qué votan negativamente? :)))))))))))))))

PPS Edición especial para los dos que votaron negativo:

$document = new DOMDocument();
$document->loadHTML($html);
$paragraphs = $document->getElementsByTagName('p');
$result     = array();

foreach ($paragraphs as $paragraph) {
  $result[] = $paragraph->nodeValue;  
}

print_r($result);

Respondido el 12 de junio de 12 a las 17:06

Tengo la sensación de que alguien está a punto de publicar este enlace con el comentario "no analizar HTML con expresiones regulares"... stackoverflow.com/questions/1732348/… Usar un DOMDocument es probablemente una mejor manera: pablo bain

si de verdad! :DI publicó una respuesta muy similar a la tuya y me criticaron por ello. - pablo bain

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.