Passing &

5 Cevap php

Ben URL'ye geçirmeden önce urlencode değişken yaptık

http://example.com/Restaurants?alias=F%26B

Ama sayfa yazdırma gibi çalıştığınızda

 $alias =  rawurldecode($_GET['alias']);
 echo $alias;

sadece F basar. Bunu çözmek için?

5 Cevap

Ben sorgu ile bir URL isterken $_GET['alias'] var şüphe aliasF%26B. Oldukça $_GET['aliasF&B'] o doldurulur vurmayacak oluyor.

Bu durumda tam sorgu almak için $_SERVER['QUERY_STRING'] kullanmanız gerekir.

Eğer sorgu dizesi kullanarak değil gibi görünüyor "doğru." Bu key=value çiftler halinde olmalıdır. Ben yerine bilgi almak için $_SERVER['QUERY_STRING'] kullanarak bakmak istiyorum.

Sen çifti UrlEncode gerekmez. Sadece gibi isim ve bir değer UrlEncode gerekir:

Yanlış:

urlencode('aliasF=B')

Doğru:

urlencode('aliasF') . '=' . urlencode('B')

AFAIK $_GET zaten çözülür.

Bkz php.net

The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results.

Bu durum için özel farklı bir kodlama sistemi kullanarak bu sorunu çözmek mümkün:

function encode($string)
{
  $result = str_replace("|","||",$string);
  return str_replace("&","|20",$result);
}

function decode($string)
{
  $result = str_replace("|20","&",$string);
  return str_replace("||","|",$result);
}

'|' Karakteri Bu temelde kullanarak ayrı bir kaçışa sistemi oluşturmak olacaktır. O karakter normalde kullanmadığınız ve bir alan ayırıcı değil mi herhangi bir şey olabilir.

Burada, Apache ve böylece dönüşüm işeme, farklı bir şey için URL dönüşümü olmaz. Ayrıca tarayıcılar dönüşümü olmaz.

Zihin bu yapacağınız decode($_GET['alias']) ve kullanıcı basarak veya komut takip ettiğini encode() url.