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%)
-----


Zapisalem .php w UNT-8 i kraczki sa :]. Ale od poczatku jeszcze raz.

Mysql chodzi w UTF-8 Unicode (utf8).
W mysql mam ustawiona bazę i tabele: utf8_polish_ci
w nagłówku skryptu wysyłam: header('Content-type: text/html;charset=utf-8');
po połączeniu z baza mam: mysql_query('SET NAMES utf8'); (chociaz w zasadzie nie powinno byc potrzebne bo mam w mysql ustawione)

Następnie pobieram dane z bazy.
Po wywołaniu przykładowo echo $event[0]; wyświetla mi poprawnie tekst z polskimi znakami.
(dodam że w bazie zapisuje dokładnie tak: "ĄąĆćĘꣳÓóŚśŹźŻż")

Chce usunać spacje, polskie litery i dodać "_" w miejsce tych spacji co wspomniałem (stworzuc linka do mod_rewrite).
Robię to w ten sposób

$l3 = str_replace(' ', '_',strtolower(trim(strtr($event[0],'ążśźęćńół', 'azszecnol'))));

no i w tym momencie powstaja mi krzaczki.

Czy ta metoda zamiany jest zła czy mam to robic np za pomocą kodów HEX?

Pozdrawiam, Łukasz.

P.S. WYSYFIG mi nie działa wiec musze w ten sposob pisac (wkleiłem z formatowaniem z worda).

ZA JAKIES 20 MINUT:

zmieniłem na (chciałem wywoływać strtolower na polskich znakach ale juz jest okej)
$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])));

ale czy to najbardziej efektowne rozwiązanie?

Ten post edytował loopb 22.08.2007, 21:15:37
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: 27.12.2025 - 20:02