|
|
| version 1.2, 2001/05/07 13:29:56 | version 1.7, 2012/09/12 14:30:59 |
|---|---|
| Line 1 | Line 1 |
| /** @page String String | /** @page String String |
| В памяти строки[String] хранятся в виде списка фрагментов[String::Chunk::Row .item], | In memory strings [String] are stored as letters [actually, cord objects from libgd cord library, see cord.h file] |
| каждый помнит язык, на котором написан фрагмент. | plus list of fragments [String::Languages] which contain language of fragment+it's length. |
| Фрагменты, полученные из скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN), | |
| а от пользователя - из environment, из form, с диска[table:load] или из sql сервера[table:sql] | Fragments that are received from stdout of scripts are considered clean(String::Language ::L_CLEAN), |
| считаются испачканными(String::Untaint_lang ::UL_TAINTED), | but those from visitor - from stderr of scripts, from environment, from forms, |
| при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят свой язык. | from dist [table:load] or from sql server [table:sql] are considered tainted(String::Language::L_TAINTED), |
| Строку могут записать в Request.wcontext, задав ей язык. | when string involved in different operations, it can be split, but all resulting parts |
| При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[UL_TAINTED], | still remember languages of their fragments. |
| а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык". | String can be written to Request::wcontext, then part of fragments can change their language. |
| скажем | Language is set to those fragments, which were not in particular language, but just tainted[L_TAINTED], |
| they become "dirty, but we need what to do to make them clean, that is we know their language". | |
| Say, | |
| @verbatim | @verbatim |
| ^table:sql{insert into news (title) values ('$form:title')] | ^void:sql{insert into news (title) values ('$form:title')] |
| @endverbatim | @endverbatim |
| при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang], | when parameter of sql is processed, with help of Temp_lang |
| и при записи[Request::write_assign_lang] UL_TAINTED строки из $form:title фрагмента параметра | we set "current language" [Request::flang], and when string got written [Request::write_assign_lang] |
| метода sql, находящегося в кавычках, получает язык UL_SQL. | L_TAINTED string from $form:title part of parameter of sql-method, the one in apostrophes, got assigned an L_SQL language. |
| String можно преобразовать в обычную С-строку, используя String::cstr(). | String can be converted to normal string using String::cstr(). |
| При этом будут учтены языки фрагментов и произведены соответствующие вычищения. | If it is called with this parameter String::cstr(String::L_UNSPECIFIED) then |
| Также можно воспользоваться String::cstr(String::Untaint_lang), при этом будет все фрагменты строки | when it will be converted, fragment languages would be taken into consideration, and |
| насильно будути считаться написаннами на этом языке. Безотносительно к указанному во фрагменте языку. | corresponding cleansing performed. |
| Такое используется, например, для работы с именами файлов: | Particular language can also be specified String::cstr(String::Language) [by default =L_AS_IS], |
| then all string fragments would forcibly considered to be in that language, | |
| regardles of the language inside fragment. | |
| This is used, for instance, in work with file names | |
| [ATTENTION: never ever use this construction if you care about your secret files, | |
| it is used only as an example]: | |
| @verbatim | @verbatim |
| ^table:load[$form:file_name] | $file[^table::load[$form:file_name]] |
| @endverbatim | @endverbatim |
| здесь при обычной обработке $form:file_name вышел бы UL_USER_HTML, а нужен UL_FILE_NAME, | here with normal $form:file_name processing would be L_HTML|L_OPTIMIZE_BIT, while we need L_FILE_SPEC, |
| при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах. | and it would be stupid everywhere to do like we do in table:sql, insisting on {} parameters. |
| Usual language of output is String::Language::L_HTML|String::Language::L_OPTIMIZE_BIT, | |
| exception is CGI script, which got started outside of web-server, | |
| in that case language String::Language::L_AS_IS is used. | |
| Обычным языком вывода является String::Untaint_lang::UL_USER_HTML, | In fragments where language is marked as OPTIMIZED (String::Language::L_OPTIMIZE_BIT), |
| исключение составляет CGI скрипт, который запускают вне веб-сервера, | when they are converted into string String::cstr white spaces would be optimized: |
| в этом случае используется язык UL_AS_IS. | out of several consequent characters would be left only first, others would be wiped off the result. |
| */ | |
| When code works with char* it is assumed it is can never be 0. | |
| k | |
| */ |