Кодирование URL на стороне сервера

Если пользователь сам не формирует ссылку, как, например, поисковый запрос в URL, а только щелкает по заранее сгенерированным ссылкам, то URL можно сформировать на сервере, и там же закодировать.

1. Передача спец.символов

Если в передаваемых в данных есть символы, которые являются специальными URL-символами, то данные нужно закодировать с помощью функции urlencode().

$value = "abcd/.,;&'[]{}:?<>xyz";
# Закодировать
echo '<a href="?...&x='.urlencode($value).'">Передать</a>';
# Раскодировать
$x = urldecode($_GET['x']);

2. Передача строковых данных в закодированном виде

Как видно из предыдущего примера, параметр, закодированный с помощью функции 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.'">
';

3. Передача массивов и объектов

До сих пор мы рассматривали передачу строковых данных. Но передавать через URL можно данные любого типа, в том числе, массивы и объекты. Для этого последние нужно сериализовать, а затем закодировать, одним из способов, описанных выше, например:

$arr = ['name'=>'Иван Петров', 'age'=>35, 'professon'=>'web-designer'];
echo '<a href="?...&x='.urlencode(serialize($arr)).'">Передать</a>';
# Десериализовать и отобразить
$arr = unserialize($_GET['x']);
print_r($arr);