domingo, 31 de julio de 2016

Manipulando cadenas de texto y HTML en PHP

Una cosa que siempre hago es traer texto desde algún sitio web y luego extraer algún fragmento del mismo.

Y siempre me olvido de qué funciones PHP se usan. Así que se las dejo aquí.

Para traer el HTML de una página web

$url = "http://accesoperu.com";
$contenido = file_get_contents($url);
echo $contenido;

En la variable $contenido estará el HTML.


Para codificar como cadena URL al pasarla por GET

Como dice el manual de PHP: "Devuelve una cadena en la que todos los caracteres no-alfanuméricos excepto -_. han sido reemplazados con un signo de porcentaje (%) seguido por dos dígitos hexadecimales y los espacios son codificados como signos de suma (+)".

$url = urlencode($url );

Para cortar el texto por alguna palabra o etiqueta

$divisor = "<title>";
list($elemento1, $elemento2) = explode($divisor, $contenido);

La función explode retorna un arreglo (array). Así, usará <title> para dividir el texto. En este caso, dado que <title> sólo parece una vez en el HTML, creará dos fragmentos. El primero: $elemento1, contiene la parte anterior a <title> primera parte del HTML (en este caso) y $elemento2 el resto de la página, o lo que había después de <title>.

Algo importante.
Si usas un divisor que aparece varias veces en el texto o HTML (en este caso), explode usa el divisor para partir el texto en tantos fragmentos como veces el divisor aparezca.

Por ejemplo, en este caso, corta cada párrafo usando la etiqueta HTML de párrafo:
$divisor = "<p>";
$fragmentos = explode($divisor, $contenido);

En el caso que esta página web tuviera 5 párrafos y quisiera ver el tercero, bastaría con escribir:
echo $fragmentos[2];

Recuerda que  $fragmentos[0], sería el primer fragmento.


Quitar todas las etiquetas HTML menos...

Para eso usaremos strip_tags. La que aparecen entre las comillas simples, son la que dejarán.
En este caso se dejarán las etiquetas HTML de párrafo, encabezados (1,2 y 3) negritas, iframes e imágenes.

$contenido_limpio = strip_tags($contenido, '<p><b><h1><h2><h3><strong><iframe><img>');


Buscando una palabra en el texto

Para eso usamos la función stripos o strpos para php 4
Por ejemplo:

if($posicion = stripos("ACCESOPERU.COM. Diseño web y hosting corporativo", "Corporativo") !== FALSE) {
  echo "Palabra encontrada en la posición $posicion";
}

Tomando un fragmento

Para eso se usa substr.

Ejemplo, para obtener los primeros 10 caracteres:

$frase = "ACCESOPERU.COM";
$resultado = substr($frase, 0, 10);
echo $resultado;

Imprimirá: ACCESOPERU

Encontrar y cambiar

Para eso se usa str_replace.
Por ejemplo, quitarle los espacios en banco a una frase:

$frase_sin_espacios = str_replace(' ', '', $frase);

Por ejemplo, con un array:

$fragmento  = "ACCESOPERU.COM: Diseño web y Hosting corporativo";
$buscada = array("Diseño web", "Hosting corporativo");
$reemplazo   = array("Capacitación para webmasters", "Desarrollo de software ONLINE");

$resultado = str_replace($buscada, $reemplazo, $fragmento);
echo $resultado;

Imprimirá: ACCESOPERU.COM: Capacitación para webmasters y Desarrollo de software ONLINE


Texto en varia líneas desde MySQL

Para eso se usa explode y el separador PHP_EOL.

$todas_las_lineas = explode( PHP_EOL , $texto_de_DB);
foreach($todas_las_lineas as $linea) {
echo "$linea<br>";
}



Espero que te sea de utilidad.