--- parser3/src/doc/string.dox 2001/05/07 13:29:56 1.2 +++ parser3/src/doc/string.dox 2002/04/29 05:59:33 1.4 @@ -2,16 +2,16 @@ В памяти строки[String] хранятся в виде списка фрагментов[String::Chunk::Row .item], каждый помнит язык, на котором написан фрагмент. -Фрагменты, полученные из скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN), -а от пользователя - из environment, из form, с диска[table:load] или из sql сервера[table:sql] +Фрагменты, полученные из stdout скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN), +а от пользователя - из stderr скриптов, из environment, из form, с диска[table:load] или из sql сервера[table:sql] считаются испачканными(String::Untaint_lang ::UL_TAINTED), при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят свой язык. -Строку могут записать в Request.wcontext, задав ей язык. +Строку могут записать в Request::wcontext, задав ей язык. При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[UL_TAINTED], а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык". скажем @verbatim -^table:sql{insert into news (title) values ('$form:title')] +^void:sql{insert into news (title) values ('$form:title')] @endverbatim при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang], и при записи[Request::write_assign_lang] UL_TAINTED строки из $form:title фрагмента параметра @@ -20,16 +20,22 @@ String можно преобразовать в обычную С-строку, используя String::cstr(). При этом будут учтены языки фрагментов и произведены соответствующие вычищения. Также можно воспользоваться String::cstr(String::Untaint_lang), при этом будет все фрагменты строки -насильно будути считаться написаннами на этом языке. Безотносительно к указанному во фрагменте языку. -Такое используется, например, для работы с именами файлов: +насильно будут считаться написанными на этом языке. Безотносительно к указанному во фрагменте языку. +Такое используется, например, для работы с именами файлов +[ВНИМАНИЕ: никогда и нигде не используйте эту конструкцию, если вам дороги ваши секретные файлы, +используется только для примера]: @verbatim -^table:load[$form:file_name] +$file[^table::load[$form:file_name]] @endverbatim -здесь при обычной обработке $form:file_name вышел бы UL_USER_HTML, а нужен UL_FILE_NAME, +здесь при обычной обработке $form:file_name вышел бы UL_HTML|UL_OPTIMIZE_BIT, а нужен UL_FILE_SPEC, при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах. -Обычным языком вывода является String::Untaint_lang::UL_USER_HTML, +Обычным языком вывода является String::Untaint_lang::UL_HTML|String::Untaint_lang::UL_OPTIMIZE_BIT, исключение составляет CGI скрипт, который запускают вне веб-сервера, -в этом случае используется язык UL_AS_IS. +в этом случае используется язык String::Untaint_lang::UL_AS_IS. + +В фрагментах, язык которых помечен как OPTIMIZED при преобразовании в строку String::cstr +будут оптимизированы whitespace символы, из нескольких идущих подряд символов будет оставлен первый, +остальные будут удалены. */ \ No newline at end of file