Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
deirathe
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


Primo: KOD W TAGI!!!
Secundo: W jakim kodowaniu zapisany masz plik?? Sprawdź to smile.gif


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
loopb
post
Post #3





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

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


ANSI blinksmiley.gif


dobra zmienione na UTF-8. A jaka jest roznica z UCS-2 LE i BE. Pozdrawiam.
Go to the top of the page
+Quote Post
deirathe
post
Post #4





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


UCS jest kodowane 16 bitowymi znakami unicode.
P.S. Krzaki przestaly dolegac?

Ten post edytował deirathe 22.08.2007, 12:50:16


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
loopb
post
Post #5





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
kicaj
post
Post #6





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


  1. <?php
  2. @mysql_query( "SET NAMES UTF8", $connect );  
  3. @mysql_query( "SET CHARSET UTF8", $connect );
  4. ?>


Bylo walowane juz to...

Ten post edytował kicaj 22.08.2007, 22:32:57


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
loopb
post
Post #7





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

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

 



RSS Aktualny czas: 19.08.2025 - 06:58