Hace varios años utilizo esta función para extraer textos o contenidos automaticamente de un documento html o similares.


function between($beg, $end, $str) {
$a = explode($beg, $str, 2);
$b = explode($end, $a[1]);
return $beg . $b[0] . $end;
}

El modo de uso es sencillo, teniendo la función incluida en el archivo PHP, la usamos de la siguiente manera:

$url = file_get_contents("http://www.google.com/");
$extract_string = between('<span id="perfil">', '</span>', $url);

Donde $url es la variable que trae el html (bien podría ser un texto plano o un archivo txt, cualquier texto al que necesites extraerle una porción definida). Y $extract_string es la llamada a nuestra función Between, donde como parametros indicamos el string a buscar como inicio, el string final y la variable a la que debe aplicar la acción.

Cabe aclarar que esta función trae el texto que se encuentra entre esos dos parametros, junto con los parametros, es decir que si estamos buscando un texto que esta entre <strong> y </strong> el resultado será: <strong>El texto que esta dentro</strong>.

Si necesitas que el texto no tenga esos dos parametros incluidos puedes reemplazarlo con la función de PHP eregi_replace, o cambiar en la función between la línea:
return $beg . $b[0] . $end;

Por:
return $b[0];

3 thoughts on “Between: Función PHP para extraer texto de documentos html

  1. hola… estoy aprendiendo a programar en php, y me gustaria usar esta funcion pero no me resulto tan facil…

    yo quiero extraer de una pagina y los nombres y apellidos de una persona, el link es el siguiente : http://www.cne.gob.ve/web/registro_electoral/ce.php?nacionalidad=V&cedula=200

    sin embargo se me presentan dos opciones el otro caso es el siguiente http://www.cne.gob.ve/web/registro_electoral/ce.php?nacionalidad=V&cedula=1 en el cual la persona esta reportada como fallecido, pero igual muestra el nombre y apellido solo que en cuatro partes, es decir primer y segundo nombre, primer y segundo apellido.

    Saludos…
    y Muchas gracias

  2. Muchísimas gracias! es lo que estaba buscando.
    Te hago una pregunta, lo tengo para que me traiga lo que esta entre y y necesitaría que me traiga todos los «li» y no solo el primero. se puede hacer?

  3. Grácias, pero no funciona.

    El primer error que me lanza que no está definico el índice ‘1’ de la variable $a.

    Si le quito el índice ‘1’, me salta otro error:

    Warning: explode() expects parameter 2 to be string, array given in C:\wamp\www\Parse\between.php on line 4

    La linea 4 es
    $b = explode($end, $a);

    Espero poder recibir una respuesta ya que considero interesante tener una función tan sencilla como esa.. si me funciona claro!! jejeje ;)

Comments are closed.