ZF1 Капча при использовании русских символов выдает последний символ как английскую букву
Всем привет. Кто сможет подсказать в каком направлении думать?
Я знаю где возникает ошибка, а именно в ядре зенда в `abstract class Zend_Captcha_Word` в этом методе
/**
* Generate new random word
*
* @return string
*/
protected function _generateWord()
{
$word = '';
$wordLen = $this->getWordLen();
$vowels = $this->_useNumbers ? self::$VN : self::$V;
$consonants = $this->_useNumbers ? self::$CN : self::$C;
$totIndexCon = count($consonants) - 1;
$totIndexVow = count($vowels) - 1;
for ($i=0; $i < $wordLen; $i = $i + 2) {
// generate word with mix of vowels and consonants
$consonant = $consonants[Zend_Crypt_Math::randInteger(0, $totIndexCon, true)];
$vowel = $vowels[Zend_Crypt_Math::randInteger(0, $totIndexVow, true)];
$word .= $consonant . $vowel;
}
if (strlen($word) > $wordLen) {
// *******************************************
// * ВОТ ЗДЕСЬ НУЖНО, ЧТОБЫ БЫЛО mb_substr() *
// *******************************************
$word = substr($word, 0, $wordLen);
}
return $word;
}
Вот пример моего кода как я ее использую
Zend_Captcha_Word::$CN = ['а', 'в', 'г', 'д', 'е', 'ж', 'и', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'э', 'ю', 'я', 1, 2, 3, 4, 5, 6, 7, 8, 9];
Zend_Captcha_Word::$VN = range(0, 9);
Zend_Captcha_Word::$V = ['с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'э', 'ю', 'я'];
Zend_Captcha_Word::$C = ['а', 'в', 'г', 'д', 'е', 'ж'];
$element = new Zend_Form_Element_Captcha('captcha', [
'captcha' => [
'captcha' => 'Image',
'wordLen' => 7,
'timeout' => 120,
'expiration' => 300,
'font' => './fonts/myfont.ttf',
'imgDir' => './captcha/',
'imgUrl' => '/captcha/',
'dotNoiseLevel' => 40,
'lineNoiseLevel' => 4,
'class' => 'img-thumbnail',
]
]);
$element->setRequired(true)
->setLabel('Проверочный код')
->setAttrib('placeholder', 'Введите число')
->setAttrib('class', 'form-control')
->addDecorator(['row' => 'HtmlTag'], ['tag' => 'div', 'class' => 'form-group']);
$this->addElement($element);
Иногда она отображает символ как нужно, а иногда нет
Спалил это в дебагере