1

Temat: Zapis polskich znaków do bazy

Chodzi o zapis imion i nazwisk do bazy danych MySQL. Wszystko jest oparte o kodowanie UTF-8.
Jednakże Cake nie zapisuje do bazy danych niczego co posiada polski znak.

var $validate = array(
        'imie' => array(
            //'rule' => array('custom', '/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,15}$/i'),
            'rule' => array('minLength', '3'),
            'required' => 'true',
            'allowEmpty' => 'false',
            'message' => 'Imie musi zawierać tylko litery i od 3 do 15 znaków!'
        ), itd

Powyższe rozwiązanie zapisze wszystko do pierwszej polskiej litery - resztę wycina.
'rule' => array('custom', '/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,15}$/i'), - nie działa - nie przechodzi walidacji...

Czy da się to zrobić zapis tych znaków? Nie wyobrażałem nawet sobie że z taką pierdółką są takie problemy.

New Now Know How

2

Odp: Zapis polskich znaków do bazy

Powinno działać. Upewnij się, że w pliku 'app/config/database.php' masz ustawione:  'encoding' => 'UTF8'.
Przy imieniu raczej powinno być tak (pierwsza litera duża, reszta mała):

'rule' => array('custom', '/^[A-ZŁ]{1}[a-ząćęłńóśźż]{2,15}$/i')

Pozdrawiam

Ostatnio edytowany przez carlin (2009-06-27 18:07:52)

3

Odp: Zapis polskich znaków do bazy

Dzięki Carlin za zwrócenie mojej uwagi na wielkość liter.
Nie przejmowałem się tym gdyż miałem zdefiniowaną "automagiczną" funkcję w modelu, która odpowiednio formatowała tekst tzn -piersza litera duża, reszta małe:

function beforeSave(){
    $this->data['User']['imie'] = $this->format($this->data['User']['imie']);
    $this->data['User']['nazwisko'] = $this->format($this->data['User']['nazwisko']);
    return true;
}

gdzie:

function format(&$text){
    $temp = strtolower($text);
    $temp = ucfirst($temp);
    return $temp;
}

Gdy ją wyłączyłem wszystko zaczęło działać. Wniosek dla potomnych i fanów automagiczności -> Uwaga na funkcje: strtolowe i ucfirst z polskimi znakami. Lepiej poprawny zapis imion itp wymusisz przez wykorzystanie wyrażeń regularnych...

Problem rozwiązany!

New Now Know How