comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Buscar y Buscar dentro de Cadenas

  • 4 Respuestas
  • 1533 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Z3R0N3

  • *
  • Underc0der
  • Mensajes: 27
  • Actividad:
    0%
  • Reputación 0
  • CODED by Z3R0N3
    • Ver Perfil
« en: Julio 12, 2011, 02:28:41 pm »
Hola chicos, estoy un poco atascado con un PHP y me gustaría que me echasen una manita... Gracias de Antemano.


Os explico lo que quiero hacer;


(ESTO NO ES IMPORTANTE :: Perdón por las mayúsculas)

En primer lugar, un "archivo.php" recibe por POST todo el contenido HTML de una página.

Éste "archivo.php" se encarga de modificar dicho contenido HTML para generar otro distinto.


(ESTO SI ES IMPORTANTE :: Perdón por las mayúsculas)


¿Qué necesito? Pues bien, me gustaría extraer ciertas STRINGs o Cadenas que existan dentro del contenido que recibo, y dentro de estas cadenas, encontrar unos enlaces que existen dentro de ellos. Es decir, lo explico con un ejemplo:


Código: PHP
  1. $cadenaHTML = '
  2.  
  3. Aquí un desparrame de código HTML
  4.  
  5. onclick="return confirmar('http://www.laweb.es/Documentos/webflv1308325486171.flv', '0', 2);"
  6.  
  7. más código HTML
  8.  
  9. onclick="return confirmar('http://www.laweb.es/Documentos/webflv1308325540890.flv', '1', 2);"
  10.  
  11. más código HTML
  12.  
  13. onclick="return confirmar('http://www.laweb.es/Documentos/ARCHIVOS/d0ab59150_folder.png', '0', 1);"
  14.  
  15. más código HTML
  16.  
  17. onclick="return confirmar('http://www.laweb.es/Documentos/ARCHIVOS/d0ab59150_mensaje 128px.png', '1', 1);"
  18.  
  19.  
  20. Aquí termina el resto de código HTML.
  21. ';


Pues bien, suponed que eso es lo que recibo por $_POST.

Lo que quiero es extraer todos los "onclick" y dentro de éstos todas las URL completas que aparezcan.



Tengo algo de código tirado y consigo reemplazar todos los "onclick" por espacios vacios pero en ningún momento consigo extraer las URL's.


Aquí pongo el código que tengo para comprobar que ha encontrado todos los "onclick" y los ha vaciado (para asegurarme de que encuentra todos, en realidad habría que eliminar esa función o bien reemplazarla por la búsqueda de las URL's).


Código: PHP
  1.  
  2. // Aquí compruebo que en el contenido recibo existe "onclick" y " );" " para proceder a seguir.
  3.  
  4.         if((No tienes permisos para ver links. Registrate o Entra con tu cuenta($contenidorecibido, 'onclick') == true) && (No tienes permisos para ver links. Registrate o Entra con tu cuenta($contenidorecibido, ');"') == true)) {
  5.  
  6.  
  7. // Ahora cuenta el nº de "onclick" que ha encontrado para entrar en un For y recorrerlos.
  8.  
  9.             $contadorPartes = No tienes permisos para ver links. Registrate o Entra con tu cuenta($contenidorecibido, 'onclick');
  10.             for ($f = 0; $f < $contadorPartes; $f++) {
  11.  
  12. // En la variable $extraerContenido extraigo el contenido realizado desde el primer delimitador 'onclick="return ' al segundo delimitador que sería ');"' para almacenarlo en la misma variable.
  13.  
  14.  
  15.             $extraerContenido = 'onclick="return '.getContentFromDelimiters($contenidorecibido, 'onclick="return ', ');"').');"';
  16.  
  17.  
  18. // Por último reemplazo las cadenas encontradas "onclick" por vacías ya que así tengo una muestra visual de que se ha machacado todas. ( "Ha encontrado todos los 'onclick' ).
  19.  
  20.             $limpiador3 = No tienes permisos para ver links. Registrate o Entra con tu cuenta($extraerContenido, '', $contenidorecibido);
  21.             $contenidorecibido = $limpiador3;
  22.             }
  23.         }



En el código anterior llamo a 1 función pero aquí pongo las 2 funciones que estoy usando.


- La primera para buscar el contenido que haya entre 2 delimitadores.

- La segunda para buscar las URL's dentro de la STRING que le pase.


Aquí os pego el código:


Código: PHP
  1. function getContentFromDelimiters($string, $start, $end) {
  2.         $pos = No tienes permisos para ver links. Registrate o Entra con tu cuenta($string, $start);
  3.         $str = No tienes permisos para ver links. Registrate o Entra con tu cuenta($string, $pos);
  4.         $str_two = No tienes permisos para ver links. Registrate o Entra con tu cuenta($str, No tienes permisos para ver links. Registrate o Entra con tu cuenta($start));
  5.         $second_pos = No tienes permisos para ver links. Registrate o Entra con tu cuenta($str_two, $end);
  6.         $str_three = No tienes permisos para ver links. Registrate o Entra con tu cuenta($str_two, 0, $second_pos);
  7.         $unit = No tienes permisos para ver links. Registrate o Entra con tu cuenta($str_three);
  8.         return $unit;
  9. }
  10.  
  11. function tieneUrls($cuerpo){
  12. No tienes permisos para ver links. Registrate o Entra con tu cuenta($cuerpo);
  13. $regex = '$\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$i';
  14. if (No tienes permisos para ver links. Registrate o Entra con tu cuenta($regex, $cuerpo, $result, PREG_PATTERN_ORDER))
  15. return $result;
  16. }



Bueno, espero que puedan echarme un cable ya que nose por qué me he quedado atascado por completo.

Y ya saben, lo que busco es extraer todos los "onclick" y dentro de éstos todas las URL completas que aparezcan.


Bueno espero que me puedan echar un cable. Muchísimas Gracias nuevamente y Saludos.
« Última modificación: Marzo 27, 2014, 05:57:56 pm por Expermicid »
Daria todo lo que sé por la mitad de lo que ignoro

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #1 en: Julio 12, 2011, 03:53:32 pm »
Yo creo que tu problema esta en la funcion. Hize una misma función pero modifique la Expresion Regular.

Código: PHP
  1. <?php
  2.  
  3.  
  4. function tieneUrls($cuerpo){
  5.  
  6.         No tienes permisos para ver links. Registrate o Entra con tu cuenta('/onclick=\"[^[(]+\((?:\'|\"){1}(?=https?|ftp)([^\']+)(?=\',\s?)/i',No tienes permisos para ver links. Registrate o Entra con tu cuenta($cuerpo), $result, PREG_PATTERN_ORDER);
  7.  
  8.         return $result[1];
  9. }
  10.  
  11. $cadenaHTML = "
  12.  
  13. Aquí un desparrame de código HTML
  14.  
  15. onclick=\"return confirmar('http://www.laweb.es/Documentos/webflv1308325486171.flv', '0', 2);\"
  16.  
  17. más código HTML
  18.  
  19. onclick=\"return confirmar('http://www.laweb.es/Documentos/webflv1308325540890.flv', '1', 2);\"
  20.  
  21. más código HTML
  22.  
  23. onclick=\"return confirmar('http://www.laweb.es/Documentos/ARCHIVOS/d0ab59150_folder.png', '0', 1);\"
  24.  
  25. más código HTML
  26.  
  27. onclick=\"return confirmar('http://www.laweb.es/Documentos/ARCHIVOS/d0ab59150_mensaje 128px.png', '1', 1);\"
  28.  
  29.  
  30. Aquí termina el resto de código HTML.
  31. ";
  32. No tienes permisos para ver links. Registrate o Entra con tu cuenta(tieneUrls($cadenaHTML));
  33.  
  34.  
  35.  ?>
  36.  

Salida:
Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
[yoya@Fedora ~]$ php /var/www/html/a.php
Array
(
    [0] => http://www.laweb.es/Documentos/webflv1308325486171.flv
    [1] => http://www.laweb.es/Documentos/webflv1308325540890.flv
    [2] => http://www.laweb.es/Documentos/ARCHIVOS/d0ab59150_folder.png
    [3] => http://www.laweb.es/Documentos/ARCHIVOS/d0ab59150_mensaje 128px.png
)
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado Z3R0N3

  • *
  • Underc0der
  • Mensajes: 27
  • Actividad:
    0%
  • Reputación 0
  • CODED by Z3R0N3
    • Ver Perfil
« Respuesta #2 en: Julio 12, 2011, 09:49:35 pm »
~ Yoya ~ tio... te quiero!! xDD

Cómo pudiste verlo tan fácilmente?¿

Se nota que no entregué aún las tareas del taller de PHP jajajaj gracias amigo me salvaste la vida :D


Voy a ponerme a buscar un buen manual de expresiones regulares... creo que ando bastante perdido y me encantaría aprenderlas son utilísimas.


Thank's :P
Daria todo lo que sé por la mitad de lo que ignoro

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #3 en: Julio 13, 2011, 09:15:51 am »
Pasa que tengo tiempo parseando datos, algo de experiencia tendre XD.

No pasa nada compañero, cualquier duda con Expresiones Regulares o PHP, aquí estamos para ayudarte.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado Z3R0N3

  • *
  • Underc0der
  • Mensajes: 27
  • Actividad:
    0%
  • Reputación 0
  • CODED by Z3R0N3
    • Ver Perfil
« Respuesta #4 en: Julio 13, 2011, 09:25:28 am »
Que buenísimo... jeje, supongo que ya se puede dar como solucionado :D

Gracias MOD.
Daria todo lo que sé por la mitad de lo que ignoro

 

¿Te gustó el post? COMPARTILO!