Tengo una URL como esta:

http://www.nearbynursinghomes.com/innerpage.php?state=CA&city=RIVERSIDE&shop=ALTA%20VISTA%20HEALTHCARE%20&%20WELLNESS%20CENTRE

Actualmente estoy usando este código:

$category = $_GET["state"];
$city= $_GET["city"];
$shop= $_GET["shop"];
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 

$start_from = ($page-1) * $results_per_page;
$sql = "SELECT *
    FROM $datatable 
    WHERE STATE='$category'
    AND CITY='$city'
    AND PROVNAME='$shop'
    ORDER BY PROVNAME ASC LIMIT $start_from, $results_per_page" ;
$rs_result = $conn->query($sql); 

Sin embargo, no devuelve el valor adecuado debido a & en el medio del valor que dice shop=ALTA%20VISTA%20HEALTHCARE%20&%20WELLNESS%20CENTRE.

Simplemente se corta. ¿Cómo solucionaría esto?

0
Charles Park 31 mar. 2017 a las 06:54

2 respuestas

La mejor respuesta

Después de un buen descanso nocturno se me ocurrió esta solución utilizando las herramientas proporcionadas aquí.

$shop= $_SERVER['REQUEST_URI'];
$shop= explode("=", $shop,4);
$shop= $shop[3];
$shop= urldecode("$shop");
0
Charles Park 31 mar. 2017 a las 14:35

Tiene una cadena de consulta con formato incorrecto en su url. Debe hacer todo lo que esté a su alcance para corregir esto en su origen.

Si no puede hacerlo, lo mejor que puede hacer es una solución alternativa.

Este no es un método particularmente eficiente, ni un patrón simple (Patrón Demo), pero lo hará. trabaja en tu cadena de muestra.

Puede aprovechar $_SERVER['REQUEST_URI'] o lo que desee para capturar su URL, luego use este método preg_match() (PHP Demo):

$url=urldecode('http://www.nearbynursinghomes.com/innerpage.php?state=CA&city=RIVERSIDE&shop=ALTA%20VISTA%20HEALTHCARE%20&%20WELLNESS%20CENTRE');
if(preg_match_all('/(?<=[?&])([^=]+)=\K[^=]+(?=&|$)/',$url,$qs)){
    //              key------^^^^^^^   ^^^^^-------value
    $array=array_combine($qs[1],$qs[0]);
    var_export($array);
}

Salida:

array (
  'state' => 'CA',
  'city' => 'RIVERSIDE',
  'shop' => 'ALTA VISTA HEALTHCARE & WELLNESS CENTRE',
)

Luego puede hacer referencia a esos elementos de matriz cuando escribe sus declaraciones preparadas de MySQLi con marcadores de posición .


Si está contento de acceder a los otros pares clave-valor con $_GET y solo desea extraer el valor shop, entonces esta es una forma simple / directa:

Código: (Demo)

$url = urldecode('http://www.nearbynursinghomes.com/innerpage.php?state=CA&city=RIVERSIDE&shop=ALTA%20VISTA%20HEALTHCARE%20&%20WELLNESS%20CENTRE&page=4');
echo preg_match('~[?&]shop=\K[^=]+(?=&|$)~', $url, $out) ? $out[0] : '[fail]';

Salida:

ALTA VISTA HEALTHCARE & WELLNESS CENTRE

(Patrón de demostración)

1
mickmackusa 15 mar. 2018 a las 13:14