Witam.

1) Logika ereg_replace -> zastąp wszystkie znaki, które nie należą do podanego zakresu, znakiem pustym (edytor forum dodał tu automatycznie znak \).
Następnie, jeśli user wpisał swoje imię z małej litery, funkcja ucfirst zmieni pierwsza literę na wielką.
Póżniej warunek, że imię musi mieć conajmniej 1 znak.

Problem polega na tym, że ereg_replace nie rozpoznaje, że litery ś, Ś, ź, Ź należą do zakresu. Są one zastępowane znakiem " ".

Jeśli zmienię zakres na [!@#$%^&] itd. litery ś, ź zostają, ale już funkcja ucfirst nie zmieni jej na wielką.

Gdzie szukać błędu? Co jest żle? Proszę o podpowiedź zorientowanych.

  1. <?php
  2. if (isset($_POST['registerName'])) {
  3. $_SESSION['registerName'] = $_POST['registerName'];
  4. $registerName = $_SESSION['registerName'];
  5. $registerName = ereg_replace('[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]', "", $registerName);
  6. $registerName = ucfirst($registerName);
  7.  
  8.  if (strlen($registerName) < 1 ) {
  9.  $registerNameInfo = " Popraw imię";
  10.  
  11.  } else {
  12.  $registerNameInfo = " OK";
  13.  
  14.  }
  15. }
  16. ?>


[EDIT]
W powyższym przykładzie kodowanie znaków było ustawione na ISO-8859-2, stąd przypuszczenie, że ereg_replace nie działa prawidłowo, ponieważ wskazane ISO nie obsługuje niektórych polskich znaków.
Podobnie nie zadziała funkcja ucfirst;

  1. <?php
  2. echo $ISO = ucfirst("xB6"); /*--- dla ISO-8859-2 wyświetli małą literkę ś ---*/
  3.  
  4. echo $UTF = ucfirst("xC5x9B"); /*--- dla UTF-8 wyświetli małą literkę ś ---*/
  5. ?>



...czyli lipa guitar.gif