Comprobar en PHP si una URL contiene una cadena
Muchas 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.