Если пользователь сам не формирует ссылку, как, например, поисковый запрос в URL, а только щелкает по заранее сгенерированным ссылкам, то URL можно сформировать на сервере, и там же закодировать.
Если в передаваемых в данных есть символы, которые являются специальными URL-символами, то данные нужно закодировать с помощью функции urlencode().
$value = "abcd/.,;&'[]{}:?<>xyz"; # Закодировать echo '<a href="?...&x='.urlencode($value).'">Передать</a>';
# Раскодировать $x = urldecode($_GET['x']);
Как видно из предыдущего примера, параметр, закодированный с помощью функции urlencode(), при получении автоматически раскодируется. Иногда этого как раз и не нужно, например, при редиректах.
В таких случаях применяйте метод Url::encode(). Кроме того этот метод видоизменяет строку и делает ее нечитаемой.
$f = 'image1.jpg';
# Закодировать
$f = Url::encode($f);
# Передать
echo '<a href="?...&x='.$f.'">Передать</a>';
# Раскодировать $f = Url::decode($xdat[1]); # Отобразить echo ' <img src="images/'.$f.'"> ';
До сих пор мы рассматривали передачу строковых данных. Но передавать через URL можно данные любого типа, в том числе, массивы и объекты. Для этого последние нужно сериализовать, а затем закодировать, одним из способов, описанных выше, например:
$arr = ['name'=>'Иван Петров', 'age'=>35, 'professon'=>'web-designer']; echo '<a href="?...&x='.urlencode(serialize($arr)).'">Передать</a>';
# Десериализовать и отобразить $arr = unserialize($_GET['x']); print_r($arr);