Книга: Программирование на языке Ruby

19.1.1. Введение в библиотеку cgi.rb

19.1.1. Введение в библиотеку cgi.rb

Библиотека cgi.rb включена в стандартный дистрибутив Ruby. Ее функциональность в основном реализована в центральном классе CGI. Первое, что нужно сделать при работе с данной библиотекой, — создать экземпляр этого класса.

require "cgi"
cgi = CGI.new("html4")

Инициализатор класса CGI принимает единственный параметр — уровень спецификации языка HTML, который должен поддерживаться методами генерации разметки, входящими в пакет CGI. Эти методы избавляют программиста от ручного написания длинных фрагментов экранированной разметки в достаточно простом коде на Ruby:

cgi.out do
 cgi.html do
  cgi.body do
   cgi.h1 { "Hello Again, "} +
   cgi.b { cgi['name']}
  end
 end
end

Здесь мы почти точно воспроизвели функциональность предыдущей программы, воспользовавшись библиотекой CGI. Как видите, класс CGI берет на себя заботу о разборе и сохранении параметров в структуре, напоминающей хэш. Поэтому, если указать URL some_program.cgi?age=4, значение параметра age можно получить как cgi['age'].

Отметим, что в данном примере нам понадобилось только значение, возвращаемое блоком; HTML-разметка строится постепенно и сохраняется, а не выводится сразу же. Это означает, что конкатенировать строки абсолютно необходимо, иначе мы увидели бы только последнюю вычисленную строку.

В классе CGI есть также удобные механизмы для кодирования строк URL и экранирования специальных символов в HTML и XML-коде. URL-кодирование — это представление «небезопасных» символов с помощью других символов, допустимых в URL. В результате получаются странные строки, изобилующие знаками %, которые вы часто встречали в Web. На самом деле это просто шестнадцатеричные ASCII-коды символов с предшествующим знаком %.

require "cgi"
s = "This| is"^ (aT$test"
s2 = CGI.escape(s)    # "This%7C+is%5E%28aT%24test"
puts CGI.unescape(s2) # Печатается "This| is"(aT$test"

Аналогично класс CGI позволяет экранировать части HTML или XML-текста, которые должны отображаться в браузере буквально. Например, без специальных мер строка "<some_stuff>" не будет показана в браузере именно в таком виде. Если необходимо показать саму разметку, например, в качестве примера в руководстве по HTML , то можно воспользоваться классом CGI для преобразования специальных символов:

require "cgi"
some_text = "<B>This is how you make text bold</B>"
translated = CGI.escapeHTML(some_text)
# "<B>This is how you make text bold</B>"
puts CGI.unescapeHTML(translated)
# Печатается "<B>This is how you make text bold</B>"

Оглавление книги


Генерация: 1.100. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз