Foros del Web » Programando para Internet » PHP »

Eliminar caracteres de una cadena según la cantidad total encontrada.

Estas en el tema de Eliminar caracteres de una cadena según la cantidad total encontrada. en el foro de PHP en Foros del Web. Hola. Estoy intentando eliminar ciertas etiquetas html dentro de una variable $contenidoArticulos la cual viene de un campo de la base de datos con algunas ...
  #1 (permalink)  
Antiguo 15/01/2019, 04:35
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 8 meses
Puntos: 65
Eliminar caracteres de una cadena según la cantidad total encontrada.

Hola.

Estoy intentando eliminar ciertas etiquetas html dentro de una variable $contenidoArticulos la cual viene de un campo de la base de datos con algunas etiquetas html que no usaremos, así que en un principio metí las etiquetas a elimnar en un array para reemplazarlo por espacios en blaco y listo.

//Etiquetas html para eliminar desde el campo contenidos en la base de datos.
Código PHP:
Ver original
  1. $eliminarHtml = array('<p>', "</p>", "<u>", "</u>", "<a>", "</a>","<strong>", "</strong>", "<em>", "</em>");

//Reemplazar por espacios vacios
Código PHP:
Ver original
  1. $contenidoSinHtml = str_replace($eliminarHtml, "", $contenidoArticulos);

Hasta aquí todo bien, sin embargo veo que algunas de las etiquetas con enlaces largos que hay dentro del contenido no son eliminados, como por ejemplo este:
Código HTML:
Ver original
  1. Artículo sobre las plantas donde.. <a href="http://www.web.com/sobre-las-plantas/a574">Título del enlace </a>

En ese caso ¿cómo podría eliminarlo?

Se me ha ocurrido esta opción pero no soy capaz de sacarlo:

Código PHP:
Ver original
  1. //Si en el array o el contenido $contenidoArticulos existe <a href
  2.  
  3. //Contar la cantidad total de caracteres de principio a fin (desde <a href hasta >Título enlace </a>)
  4.  
  5. //Contar la cantidad de caracteres en total
  6. $cadenaEncontrada = '<a href=" ';
  7. echo strlen ($cadenaEncontrada);
  8.  
  9. //Eliminar toda la cantidad total de caracteres encontrados en $cadenaEncontrada

¿Es posible hacer algo así?

Saludos.
  #2 (permalink)  
Antiguo 15/01/2019, 09:17
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: Eliminar caracteres de una cadena según la cantidad total encontrada.

en lugar de buscar <a> busca <a(.+?)>
te quedaria asi

Código PHP:
Ver original
  1. $eliminarHtml = array('<p>', "</p>", "<u>", "</u>", "/<a(.+?)>/","<strong>", "</strong>", "<em>", "</em>");

Puedes usar / o | para indicar que es una expresión regular.


Este sitio te puede ayudar a construir tus expresiones regulares
https://regex101.com/
  #3 (permalink)  
Antiguo 15/01/2019, 10:09
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años, 6 meses
Puntos: 120
Respuesta: Eliminar caracteres de una cadena según la cantidad total encontrada.

yo te aconsejaria, mejor hacer una lista TAGS permitidos , y con expresiones regulares,OJO que tambien tienes la funcion STRIP_TAGS de php

http://php.net/strip_tags

Código PHP:
Ver original
  1. <?php
  2.  
  3. //$eliminarHtml = array('<p>', "</p>", "<u>", "</u>", "/<a(.+?)>/","<strong>", "</strong>", "<em>", "</em>");
  4. $html =' <b>hola eso es un ejemplo</b>
  5. <a href="http://google">esto es google</a>
  6. <i>esto esta permitido</i>dsd
  7. <h1>este titulo demo</h1>
  8. ';
  9.  
  10. $permitidos=array("i","div","h1");
  11. $html = preg_replace_Callback('#<([a-z0-9A-Z/]+)([^>]*)>#smi',function($criterio_array)
  12. use (&$permitidos)
  13. {//var_dump($criterio_array);
  14.     $tag = trim($criterio_array[1],'/') ;//eliminamos el nombre del tag "/strong" = "strong"
  15.    
  16.     $tag = strtolower($tag);//lo convertimos a minusculas
  17.     if(in_array($tag,$permitidos)){ //si esta en la lista blanca, lo aceptamos
  18.         return $criterio_array[0];//lo devolvemos sin cambios
  19.     }
  20.     //si el proceso sigue, indica que es un tag No permitidos
  21.     return ' ';//todos los tags no permitidos seran puestos como espacios en blanco
  22. },$html);
  23.  
  24. echo $html ;
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #4 (permalink)  
Antiguo 15/01/2019, 11:47
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Eliminar caracteres de una cadena según la cantidad total encontrada.

Código PHP:
Ver original
  1. function deleteHTMLstr($s, $htmls){
  2. $sHTML = "";
  3.     for($k=0;$k<sizeof($htmls);$k++)
  4.         $sHTML .= $html
  5. $s = strip_tags($s, $sHTML);
  6. return s;
  7. }
  #5 (permalink)  
Antiguo 15/01/2019, 14:56
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 8 meses
Puntos: 65
Respuesta: Eliminar caracteres de una cadena según la cantidad total encontrada.

Hola de nuevo.

Después de hacer varias pruebas con cada ejemplo he decidido usar la función strip_tags que recomienda tuadmin.

http://php.net/strip_tags

//Ejemplo
Código PHP:
$contenidoArticulos substr($artBlog1[0]["content"], 0515);
$contenidoSinEtiquetas strip_tags($contenidoArticulos); 
Gracias ArturoGallegos, tuadmin, alvaro_trewhela por vuestra ayuda.

Etiquetas: cadena, cantidad, caracteres, html, según, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:40.