Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] strtolower; ucfirst likwidują polskie znaki ;/
Forum PHP.pl > Forum > Przedszkole
DeBest
Witam,

zrobiłem ostatnio funkcję w php która poprawia wpisane dane tak aby zamiast wpisanych np. "DaWId" było "Dawid".

I wszystko ok ale...
Jeśli ktoś ma polskie znaki diakrytyczne w imieniu to zamiast nich są kwadraty ;/

oto kod tej funkcji:
  1. <?php
  2. function convert($name) {
  3.  
  4. $string = split(" ", $name);
  5. $string_lower = strtolower($string[0]);
  6. $string_ucfirst = ucfirst($string_lower);
  7.  
  8. return $string_ucfirst;
  9. ?>


Wie ktoś jak temu zaradzić?
mike
A tak Cie naprowadzę:
  1. <?php
  2.  
  3. function ucfirst_utf8($str) {
  4.    if (mb_check_encoding($str,'UTF-8')) {
  5.        $first = mb_substr(mb_strtoupper($str, "utf-8"),0,1,'utf-8');
  6.        return $first.mb_substr(mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8');
  7.    } else {
  8.        return $str;
  9.    }
  10. }
  11.  
  12. ?>
.radex
po pierwsze - jakie kodowanie? jeśli utf-8, to będziesz musiał użyć funkcji mb_*

po drugie - php AFAIK nie obsługuje przy strtolower itp. polskich znaków, więc będziesz musiał sobie sam zamienić poprzez str_replace('Ę','ę',$string); itd.

EDIT: Ok, mike zrobił już to za mne tongue.gif
mike
Cytat(.radex @ 18.02.2009, 11:01:36 ) *
EDIT: Ok, mike zrobił już to za mne tongue.gif
Aaa tam zaraz ~mike. Wystarczy manuala dobrze czytać. Oo, kolejny przykład: link.
DeBest
używam UTF-8

niestety wyskakuje mi komunikat:

Cytat
Fatal error: Call to undefined function mb_check_encoding() in c:\usr\krasnal\www\pkzneta\pk\functions.php on line 82


testowałem to jak na razie na Krasnalu na PHP 4 i PHP5 i ciągle to samo
mike
No pomyśl trochę. Co może oznaczać że nie masz takiej funkcji jak mb_check_encoding()?
Pewnie to, że nie masz żadnej funkcji z biblioteki Multibyte String tongue.gif
Ojej, a to oznacza, że nie masz w ogóle całej biblioteki. Jaki wniosek? Nalezy sobie ją zainstalować: Multibyte String > Instalacja
DeBest
do tego że tej biblioteki to doszedłem ;P

a np gdyby na moim hostingu nie było tej biblioteki to czy istnieje inna metoda na zrobienie tego skryptu?
mike
Cytat(DeBest @ 18.02.2009, 12:56:20 ) *
a np gdyby na moim hostingu nie było tej biblioteki to czy istnieje inna metoda na zrobienie tego skryptu?
Nie. Bo PHP jest zbyt ułomne na UTF-8 domyślnie.
8rol
Cytat(mike @ 18.02.2009, 10:59:12 ) *
A tak Cie naprowadzę:
  1. <?php
  2.  
  3. function ucfirst_utf8($str) {
  4.    if (mb_check_encoding($str,'UTF-8')) {
  5.        $first = mb_substr(mb_strtoupper($str, "utf-8"),0,1,'utf-8');
  6.        return $first.mb_substr(mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8');
  7.    } else {
  8.        return $str;
  9.    }
  10. }
  11.  
  12. ?>



Sorry, że trochę odkopuję temat, ale rozglądam się za czymś podobnym i czy czasem prawidłowo nie powinno być tak:

  1. <?php
  2.  
  3. function ucfirst_utf8($str) {
  4. if (mb_check_encoding($str,'UTF-8')) {
  5. $first = mb_substr(mb_strtoupper($str, "utf-8"),0,1,'utf-8');
  6. return $first.mb_substr(mb_strtolower($str,"utf-8"),1,(mb_strlen($str)-1),'utf-8');
  7. } else {
  8. return $str;
  9. }
  10. }
  11.  
  12. ?>


Zamiast mb_strlen($str) to (mb_strlen($str)-1).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.