Function Field.

1 view
Skip to first unread message

vjach...@gmail.com

unread,
Apr 9, 2009, 4:53:18 AM4/9/09
to In-Portal Bugs
V funkcii field db_tag_processor estj funkcionaljnost' pokaza X
simvolov. (first_chars,cut_first)
$first_chars = $this->SelectParam($params,'first_chars,cut_first');
if($first_chars)
{
$needs_cut = mb_strlen($value) > $first_chars;
$value = mb_substr($value, 0, $first_chars);
if ($needs_cut) $value .= ' ...';
}

Dlja Vsex funkciy "mb_" neobxodimo vtorim parametrom peredavatj
tekushju kodirovku, inache takie funkcii nepravilno schitajusj
kolichesatvo simvolov pri ispolzoivanii jazika otlichnogo ot EN i
posledniy simvol pered obrezkoy stroki pokazivajut v vide
simpotichnoko kvadratika :) OSOBENNO v UTF-8 i UTF-16 (interesno kto
nibudj ispoljzuet UTF-16 :) )
drugimi slovami nado dobavitj vtoroy parametr, v kotorm perdajetsja
tekushaja kodirovka: \
$needs_cut = mb_strlen($value,'utf-8') > $first_chars;

Alexander Obuhovich

unread,
Apr 9, 2009, 9:37:22 AM4/9/09
to in-port...@googlegroups.com
При использовании mb_* функций в К4 указывать текущую кодировку не надо,
т.к. в методе kApplication::Init стоит след. Конструкция:

$language =& $this->recallObject( 'lang.current', null, Array('live_table'
=> true) );
if (preg_match('/utf-8/', $language->GetDBField('Charset'))) {
setlocale(LC_ALL, 'en_US.UTF-8');
mb_internal_encoding('UTF-8');
}

Т.е. если у текущего языка стоит Charset "UTF-8", то автоматим вызывается
mb_internal_encoding, который устонавливает как-раз значение 2-го параметра
для всех mb функций, чтобы его каждый раз не передовать.

Скорее всего в проекте, где была замечена данная ошибка база в UTF-8, но в
Regional секции у языке указан отличный от UTF-8 encoding.

Alexander Obuhovich
R&D Manager
Intechnic Europe Ltd.
http://www.intechnic-europe.com
http://www.in-portal.net
Phone: +371 7804099
Fax: +371 7804098
Reply all
Reply to author
Forward
0 new messages