Часто при пересылке данных формы или в GET-запросе к серверу (то есть, в части URL) необходимо преобразовать символы, имеющие специальное значение в HTTP-запросе (не-алфавитно-цифровые символы), в допустимый формат. В HTTP-запросах таким форматом является шестнадцатеричный ASCII-код символа, имеющий префикс %. Исключение составляет символ пробела, представляемый знаком +. Предположим, что нужно передать переменную myvar, имеющую значение / value, в другой PHP-сценарий. Приведенный ниже код, используемый для этой цели, работать не будет:
http://myserver.com/myscript.php?myvar=/ value
Для правильной передачи значения myvar потребуется преобразовать его в кодированное представление строки. Поскольку шестнадцатеричным значением символа / является 0x2F, а пробел представляется знаком +, правильный URL-адрес будет иметь вид:
http://myserver.com/myscript.php?myvar=%2F+value
Поскольку преобразовывать вручную каждый не-алфавитно-цифровой символ —весьма утомительное занятие, в РНР имеется функция urlencode (), которая преобразовывает все не-алфавитно-цифровые (за исключением символов -,. и ., не имеющих смысла в протоколе HTTP) в кодированную форму. Синтаксис этой функции имеет вид: urlencode($string) где $string — это строка для кодирования. Функция возвращает значение строки в закодированном виде. Функция rawurlencode () подобна urlencode О , но она не преобразует символ пробела в +. Вместо этого она преобразует пробел в шестнадцатеричное значение 0x20 (%20). Когда РНР передает параметры, принятые от HTTP-запроса (независимо от типа запроса — GET, POST или cookie-набор), он автоматически декодирует их в исходные значения. Однако для случаев, когда нужно вручную декодировать эти значения, в РНР предназначена функция urldecode (), имеющая следующий синтаксис: urldecode($enc_string) где $enc_string — это закодированная строка для декодирования. Эта функция возвращает декодированную строку. Как и в случае с urlencode (), существует функция rawurldecode О , предназначенная для шестнадцатеричного представления пробела.
|