Comprobar en PHP si una URL contiene una cadena

Comprobar en PHP si una URL contiene una cadena

phpMuchas veces tenemos que tomar decisiones en función de lo que contenga la URL. No suele ser el método más elegante y en una buena arquitectura con un modelo vista controlador no es lo frecuente, sin embargo, sí es algo que pasa y es algo que nos puede sacar de más de un problema si sabemos cómo hacerlo.

La idea es la siguiente:

  • Si la URL contiene (por ejemplo) “/categoria/” sabemos que estamos tratando con una categoría (en WordPress podríamos hacer directamente is_category()).

 ¿Cómo hacerlo con PHP?

Muy simple, sólo tendremos que comparar las cadenas y previamente recuperar la URL. ¿Cómo?

La URL se recupera así:

$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

Y la comparación la haremos como sigue:


if (false !== strpos($url,'/categoria/')) {
    echo 'La cadena /categoria/ aparece';
} else {
    echo 'La cadena /categoria/ no aparece';
}

Bonus track

¿Y por qué usamos el operador de comparación ‘ !==’  en lugar de simplemente ‘!=’? Más de uno ya sabrá que en los lenguajes no tipados, como PHP o JavaScript, una variable puede tener diferentes tipos y podemos comparar entre diferentes tipos de variables.

Es decir podemos hacer cosas como:

  • 0 == False: comparar entero con booleano comparando sólo valores, en este caso daría Verdadero
  • 0 === False: además de comprobar valores también comprueba tipos, al ser diferentes devuelve Falso

Igual para el caso anterior, si ponemos:

  • false != strpos($url,’/categoria/’): si ponemos esto y la cadena está en la posición 0 daría una salida errónea, ya que estando dentro de la cadena aparecería como que no lo está. Para asegurarnos tenemos que hacer…
  • false !== strpos($url,’/categoria/’): que también comprueba tipo, así si está en la posición 0 da un valor correcto y si la cadena no se contiene y devuelve false, al comparar también tipos no tendremos problemas.