PHP: cómo obtener el texto de varias etiquetas p seguidas
Frecuentes
Visto 1,233 veces
0
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.
2 Respuestas
2
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
1
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 php regex preg-replace or haz tu propia pregunta.
regex debe/no puede usarse para analizar HTML. - orourkek
Puede eliminar las etiquetas HTML con
strip_tags()
- flowfree@ 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? - Ark-of-Ice