Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> php + mysql + unicode
loopb
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


Hej.

Mam mały problem. Czytałem na stronie zyx art. "PHP, MySQL 4.1 i unicode". Mialem problem bo kodowanie ustawialem na utf-8 a w bazie mialem krzaki a nie polskie litery. Teraz jest juz okej i do bazy zapisuja mi sie polskie litery. Teraz chodzi mi o to ze chce na stronie zrobić sobie mod_rewrite i z jednego pola w bazie chce pobrac dane i:

1. zamienić na małe litery (to nie problem);
2. usunąć polskie znaki (i tu mam problem),

gdyż wychodzą mi krzaki ;( (tzn. znaczki kwadratowe ze znakami zapytań).

funkcje mam taka:
  1. <?php
  2. function decodeVariable($text)
  3. {
  4.  
  5. $text = html_entity_decode($text);
  6.  
  7. $szukaj = array
  8. (
  9. 'Ą',
  10. 'ą',
  11. 'Ć',
  12. 'ć',
  13. 'Ę',
  14. 'ę',
  15. 'Ł',
  16. 'ł',
  17. 'Ó',
  18. 'ó',
  19. 'Ś',
  20. 'ś',
  21. 'Ź',
  22. 'ź',
  23. 'Ż',
  24. 'ż'
  25. );
  26.  
  27. $zamieniaj = array
  28. (
  29. 'A',
  30. 'a',
  31. 'C',
  32. 'c',
  33. 'E',
  34. 'e',
  35. 'L',
  36. 'l',
  37. 'O',
  38. 'o',
  39. 'S',
  40. 's',
  41. 'Z',
  42. 'z',
  43. 'Z',
  44. 'z'
  45. );
  46.  
  47. $text = strtolower($text);
  48.  
  49. $text = str_replace($szukaj, $zamieniaj, $text);
  50.  
  51. return $text;
  52. };
  53. ?>

mam dodane na poczatku:
  1. <?php
  2. header('Content-type: text/html;charset=utf-8');
  3. ...
  4. mysql_query('SET NAMES 'utf8'');
  5. ...
  6. ?>

Może kotś mi cos poradzic i pomóc bo juz nie mam pomysłow.
Pozdrawiam, Łukasz.

...............

zaczeło działać jak dodałem:
  1. <?php
  2. $l2 = iconv('UTF-8', '', $event[0]); -> jak wyswietle $l2 to sa "krzaczki"
  3. $l3 = str_replace(' ', '_',strtolower(trim(strtr($l2, 'ĄąŻżŚśŹźĘęĆćNńÓóŁł', 'AaZzSsZzEeCcNnOoLl'))));
  4. -> $l3 juz sie dobrze wyświetla
  5. ?>

ale dlaczego? iconv bez drugiego argumentu ... nie rozumiem... a wszystko przez przypadek.

Ten post edytował loopb 23.08.2007, 03:17:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
loopb
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


Domyslilem sie po pewnym czasie jak to robilem:

  1. <?php
  2. $mysqli = @new mysqli('localhost', 'root', 'r00t', 'db_greluk');
  3. if (mysqli_connect_errno() === 0)
  4. {
  5. $mysqli -> set_charset('utf8');
  6. echo 'Character set names: ', $mysqli -> character_set_name();
  7. }
  8. else
  9. {
  10. echo 'Connect failed: ', mysqli_connect_error();
  11. exit();
  12. }
  13. }
  14. ?>


podsumowując łącze sie jak powyżej; wszystko tam jest dobrze?

  1. <?php
  2. $result = $mysqli -> query($sql_query);
  3. $event = $result -> fetch_array(MYSQLI_BOTH);
  4. ?>


pobieram sobie dane. zeby uzyskac male litery i bez polskich znakow musze najpier wprzeszukac stinga funkcja str_replace i pozamieniac polskie (niewazne jakie sa male czy duze) a dopiero pozniej strtolower gdyz strtolower przed zamiana nie zadziala (wyjda krzaczki)? zgadza sie? i po tym moge sobie zrobic jeszcze trim.

w ten sposób:
  1. <?php
  2. // $event[0] - zmienna pobrana z bazy;
  3. $l3= trim(strtolower(str_replace(array(' ','Ą','Ż','Ś','Ź','Ę','Ć','Ń','Ó','Ł','ą','ż','ś','ź','ę','ć','ń','ó','ł'), array('_','A','Z','S','Z','E','C','N','O','L','a','z','s','z','e','c','n','o','l'),$event[0])));
  4. ?>


jezeli mam gdzies blad jeszcze to poprawcie prosze.

Ten post edytował loopb 23.08.2007, 03:20:17
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 00:48