Quitar cierta parte de texto o la etiqueta que desee

  • Autor Autor WWWW
  • Fecha de inicio Fecha de inicio
WWWW

WWWW

Pi
Verificación en dos pasos activada
buena la cuestión es que tengo un texto el cual es parecido a este:
<di>>
<h2>titulo</h2>
<p>elblabla1</p>
<p>eñblabla2</p>
<p>peblabla3</p>
<p>tulabla4</p>
</div>


Entonces quisiera borrar el <p></p> numero 4 o el 3, con su texto completamente.
y que me devuelva lo mismo pero sin el <p>tulabla4</p> o <p>peblabla3</p> etc.

alguna función algo así ("<etiqueta>","la-numero-4") -> quitar("<p>",4);

alguien que me pueda ayudar ? Saludos
 
Si las etiquetas HTML no contienen atributos (style, class, id...) puede funcionarte lo siguiente:

function meSobranCosas($texto,$tag,$aparicion){
//convertimos las variables a minúscula para evitar problemas
$texto_temp= strtolower($texto);
$tag_temp= strtolower($tag);
//buscamos posicion de la n-ésima aparición del tag
$inicio= strpos($texto_temp, '<'.$tag_temp.'>',$aparicion);
//buscamos el cierre de la etiqueta en cuestión
$fin= strpos(substr($texto_temp,$inicio), '</'.$tag_temp.'>',$aparicion) + $inicio;
//devolvemos el resto del texto
$salida= substr($texto,0,$inicio).substr($texto,$fin);
return $salida;
}

Hay que tener en cuenta que el valor tag sería unicamente el texto de la etiqueta, sin los símbolos < y >. La función podría mejorarse para tener en cuenta los tags con una sola etiqueta como BR, HR o IMG.
 
PHP:
<?php
$texto = '<p>Parrafo 1.</p><a href="#">Link</a>';
echo strip_tags($texto);
echo "\n";

// Permitir<p> y <a>
echo strip_tags($texto, '<p><a>');
?>

El primer ejemplo mostraria:
HTML:
 Parrafo 1. Link
y el segundo imprimiria todos los <p> y <a> del codigo.
Podrias usar esa funcion un poco mas personalizada para lo que queres hacer :encouragement:
 
Si quieres trabajar con HTML no uses los ejemplos anteriores, ya que cualquier cambio o usos de atributos etc. fallará. No es nada recomendado. PHP ya tiene sus funciones para eso.


PHP:
<?php

$doc = new DOMDocument();

$doc->loadHTML("<div><h2>titulo</h2><p>Luis</p><p>Pablo</p><p>Pedro</p></div>", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$paragraph = $doc->getElementsByTagName('p')->item(1);
$paragraph->parentNode->removeChild($paragraph);

echo $doc->saveHTML();

Esto borrará Pablo que está en la posición 1 con tag P
 
Última edición:
luishdez tiene razón.
Si quieres prueba con esto..

PHP:
$html = '<div>
		   <h2>titulo</h2>
			 <p>blabla1</p>
			 <p>blabla2</p>
			 <p>blabla3</p>
			 <p>blabla4</p>
		 </div>';

echo eliminarP($html, 'blabla3');

function eliminarP($html, $valor)
{
	return preg_replace('/<p>'. $valor .'<\/p>/', '', $html);
}
 
Sin duda, nada como las librerías predefinidas. Esta me la apunto. Muy buena.
 
[MENTION=110151]luishdez[/MENTION] Como no se me ocurrió antes, ya había hecho algo parecido de copiar una url externa con DOM.

Sin duda, nada como las librerías predefinidas. Esta me la apunto. Muy buena.

Pienso lo mismo ahora si me la apunto.

Gracias a todos por su ayuda y a [MENTION=110151]luishdez[/MENTION] por el dato.

Saludos.:encouragement:
 
Te recomendaría uses javascript 🙂
 
Atrás
Arriba