Задать вопрос
lancer_serega
@lancer_serega
PHP Developer

ZF1 Почему Капча при использовании русских символов выдает последний символ как английскую букву?

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);


Иногда она отображает символ как нужно, а иногда нет
66a7546a09294cfea47247f6d58d857f.png91d1f7bd9c2547feb3ab4fe6f40fcd40.pnga3e9e721135644709f0426249579d315.pngc2e68ef22c4d459c91f818ca87deb0bd.png

Спалил это в дебагере
ce890f1e6a40447fb3548c1d73e0375b.jpg
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия DevOps-инженер + ИИ
    5 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы