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
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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