Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php + mysql + unicode
Forum PHP.pl > Forum > PHP
loopb
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.
deirathe
Primo: KOD W TAGI!!!
Secundo: W jakim kodowaniu zapisany masz plik?? SprawdĽ to smile.gif
loopb
ANSI blinksmiley.gif


dobra zmienione na UTF-8. A jaka jest roznica z UCS-2 LE i BE. Pozdrawiam.
deirathe
UCS jest kodowane 16 bitowymi znakami unicode.
P.S. Krzaki przestaly dolegac?
loopb
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?
kicaj
  1. <?php
  2. @mysql_query( "SET NAMES UTF8", $connect );  
  3. @mysql_query( "SET CHARSET UTF8", $connect );
  4. ?>


Bylo walowane juz to...
loopb
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.
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.