Часто, особенно при передаче данных между РНР и внешними источниками (такими как HTML-формы или базы данных), необходимо кодировать или преобразовать данные в требуемый формат. Этот раздел посвящается функциям РНР, предназначенным для этих целей. В отличие от функций addslashes {) и stripslashes (), рассмотренных в предыдущем разделе, эти функции не имеют связи с конфигурационными директивами и поэтому требуют особого внимания.Кодирование и декодирование данных для URL
Часто при пересылке данных формы или в GET-запросе к серверу (то есть, в части URL) необходимо преобразовать символы, имеющие специальное значение в HTTP-запросе {не-алфавитно-цифровые символы), в допустимый формат, В НТТР-эапросах таким форматом является шестнадцатеричный ASCII-код символа, имеющий префикс i. Исключение составляет символ пробела, представляемый знаком +, Предположим, что нужно передать переменную myvar, имеющую значение / value, в другой PHP-сценарий. Приведенный ниже код, используемый для этой цели, работать не будет:
http://myserver.com/myscript,php?myvar=/ value
Для правильной передачи значения myvar потребуется преобразовать его в кодированное представление строки. Поскольку шестнадцатеричным значением символа / является 0×2F, а пробел представляется знаком +, правильный URL-адрес будет иметь вид:
http://myserver.com/myscript.php?myvar=%2F+value
Поскольку преобразовывать вручную каждый не-алфавитно-цифровой символ — весьма утомительное занятие, в РНР имеется функция urlencode (), которая преобразовывает все не-алфавитно-цифровые {за исключением символов -, _ и не имеющих смысла в протоколе HTTP) в кодированную форму. Синтаксис этой функции имеет вид:
urlencode($string)
где $string — это строка для кодирования. Функция возвращает значение строки в закодированном виде. Функция rawurlencode {) подобна urlencode (), но она не преобразует символ пробела в +. Вместо этого она преобразует пробел в шестиадцатеричное значение 0×20 (.20), Когда РНР передает параметры, принятые от HTTP-запроса (независимо от типа запроса—GET, POST или cookie-набор), он автоматически декодирует их в исходные значения. Однако для случаев, когда нужно вручную декодировать эти значения, в РНР предназначена функция urldecode (), имеющая следующий синтаксис:
urldecode($enc_string)
где $enc_string — это закодированная строка для декодирования. Эта функция возвращает декодированную строку. Как и в случае с urlencodef), существует функция rawurldecode (), предназначенная для шестнадцатеричного представления пробела.
кодирование и декодирование двоичных данных
При кодировании двоичных данных полезна функция base64_encode (), имеющая следующий синтаксис:
base64_encode(5data)
где $data — данные для кодирования. Функция возвращает данные в переменной $data в формате base64. Аналогично РНР позволяет декодировать принятые в формате base64 данные в исходный формат с помощью функции base64_decode (), синтаксис которой показан ниже:
base64_decode($enc_string);
где $enc_string — строка в формате base64, предназначенная для декодирования. Функция возвращает данные в исходном формате.
Tags:
кодирование,
Преобразование,
Сериализация
Related posts