Логично использовать t3lib_cs::substr, отписал баг репорт #4781.
У себя пропатчил checkValue_input() так:
PHP код:
// Secures the string-length to be less than max. Will works with multi-byte strings!
if (intval($tcaFieldConf['max'])>0) {
if (!is_object($this->csConvObj)) {
if (TYPO3_MODE=='FE') {
$this->csConvObj = &$GLOBALS['TSFE']->csConvObj;
} elseif (is_object($GLOBALS['LANG'])) { // BE assumed:
$this->csConvObj = &$GLOBALS['LANG']->csConvObj;
} else { // The object may not exist yet
$this->csConvObj = &t3lib_div::makeInstance('t3lib_cs');
}
}
if (TYPO3_MODE=='FE') {
$charset = $GLOBALS['TSFE']->renderCharset;
} elseif (is_object($GLOBALS['LANG'])) { // BE assumed:
$charset = $GLOBALS['LANG']->charSet;
} else { // best guess
$charset = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'];
}
$value = $this->csConvObj->substr($charset,$value,0,intval($tcaFieldConf['max']));
}
Ну и добавил var $csConvObj; в класс.
Не знаю только, стоило столько городить или достаточно было парой строк ограничиться.