Zend_Filter_Alnum(true) : Non accetta accenti

Ciao Gianni ho notato un comportamento strano di Zend_Filter_Input_Alnum

praticamente ho un field contenente del testo, con possibili caratteri accentati, ma quando inserisco un carattere accentato il valore ritornato da Zend_filter_Alnum è null.

Solo passando prima il filtro HtmlEntities ottengo qualcosa, visto che è viene convertita in : egrave

ma ancora non è quello che mi serve perchè non funziona come dovrebbe.

Ho bisogno di inserire del testo, con possibili accenti, e alla fine devo mostrarlo, quindi alla fine il contenuto del database sarà passato nella funzione escape della vista (attraverso htmlentities quindi)...

che devo fare?

Accidenti mi sta facendo perdere un sacco di tempo.

inviato 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

puoi riportare un esempio funzionante così lo provo?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
<?php
$filters = array(
         '*'    => array(
         new Zend_Filter_StripTags(),
         new Zend_Filter_StringTrim()
         ),
         'title'   => new Zend_Filter_Alpha(true),
         'text'    => new Zend_Filter_Alnum(true)
      );
      $validators = array(
         'title'    => array(
            new Zend_Validate_StringLength(6, 32),
            new Zend_Validate_NotEmpty()
         ),
         'text'       => array(
            new Zend_Validate_StringLength(6)
         ),
         'category'    => array(
            new Zend_Validate_Int()
         )
      );
      $input = new Zend_Filter_Input($filters, $validators, $_POST);
      $defaults = array(
         'title'    => $input->getEscaped('title'),
         'text'       => $input->getEscaped('text'),
         'category'    => $input->getEscaped('category')
      );
      if ($input->isValid()) {
            if(!$entry->newEntry($this->_auth->getIdentity(), $input->getEscaped())) {
                        throw new Exception('Error while storing the new article');
            }
                $this->_redirect('/');
      } else {
         //$this->_flashMessenger->addMessage($input->getMessages());
         //$this->_redirector->goto('new', 'articles', 'default');
                        var_dump($input->getMessages());
      }

text è una textarea.

prova a mettere un carattere accentato e il risultato di $input->getEscaped('text') è null

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Niente da fare, tutto troppo ridondante e macchinoso da settare, perfino con l'utilizzo semplice.

I messaggi predefiniti sono ripetitivissimi, cose del tipo:

0 => string ''' is an empty string' (length=21)

è una stringa vuota

1 => string 'Value is empty, but a non-empty value is required' (length=49)

il valore è vuoto, ma è richiesto un valore non vuoto.

2 => string ''' is less than 6 characters long' (length=33)

la stringa è piu corta di 6 caratteri

 ;D

rettifico : questo array contiente il merge dei messaggi e degi avvisi, la ripetitività potrebbe essere dovuta a quello.

Resta il macchinamento :P

 :bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

Non si tratta di un baco ma del normale funzionamento del filtro:

public function filter($value)
    {
        $whiteSpace = $this->allowWhiteSpace ? '\s' : '';
        if (!self::$_unicodeEnabled) {
            // POSIX named classes are not supported, use alternative a-zA-Z0-9 match
            $pattern = '/[^a-zA-Z0-9' . $whiteSpace . ']/';
        } else {
            // Unicode safe filter for the value
            $pattern = '/[^\p{L}\p{N}' . $whiteSpace . ']/u';
        }

        return preg_replace($pattern, '', (string) $value);
    }

come puoi vedere l'espressione regolare utilizzata per filtrare il testo non prevede caratteri accentati o altri caratteri particolari.

Potresti però crearti un filtro ad-hoc

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

infatti più che bug l'avrei chiamata una limitazione

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda