Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konwersja między UTF8 a ISO w PHP
Forum PHP.pl > Forum > PHP
gruzin
Witam. Chciał bym aby na moje stronie było kodowanie znaków w UTFie ale moja wersja mysqla nie umożliwia tego kodowania więc po wyciągnięciu danych pojawiają się krzaczki. Jest jakaś funkcja pozwalająca na konwersje juz po wyciągnięciu danych z bazy?
Coś w stylu:
Kod
<?php
       $dane_z_bazy;
       $dane_w_utf = IsoToUtf($dane_z_bazy);
    ?>
Fixus
zrób tak:
Kod
$zapytanie = mysql_query("SET CHARSET utf8");
$sql = "SELECT * FROM tabela";
$result = mysql_query($sql);

po sprawie
gruzin
w tym problem ze moja wersja MySQLa nie obsługuje takiego kodowania...są dostępne tylko różne rodzaje ISO.
Fixus
dobrze, ale próbowałeś? Spokojnie powinno ci zadziałać
gruzin
próbowałem i tego i jeszcze czogoś w stylu "SET CHARACTER SET UTF8"... to w manualu mysqla znalazłem.
Na koniec wylistowałem sobie dostępne zbiory kodowania znaków i niestety utf tam niebyło
PiotrLegnica
iconv
gruzin
krótko i treściwie...wielkie dzieki laugh.gif
Dla leniwyxh link http://pl2.php.net/manual/pl/function.iconv.php
Hazel
Są serwery, na których iconv() nie działa, lub nie funkcjonuje poprawnie. Myślę, że bardziej chodziło o kod w rodzaju:
  1. <?php
  2. function win_conv()
  3. {
  4.  $tabela = Array(
  5. "xb9" => "xc4x85", "xa5" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
  6. "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
  7. "xf3" => "xc3xb3", "xD3" => "xc3x93", "x9c" => "xc5x9b", "x8c" => "xc5x9a",
  8. "x9f" => "xc5xba", "xaf" => "xc5xbb", "xbf" => "xc5xbc", "xac" => "xc5xb9",
  9. "xf1" => "xc5x84", "xD1" => "xc5x83");
  10.  return $tabela;
  11. }
  12.  
  13. function iso_conv()
  14. {
  15.  $tabela = Array(
  16. "xb1" => "xc4x85", "xa1" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
  17. "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
  18. "xf3" => "xc3xb3", "xD3" => "xc3x93", "xb6" => "xc5x9b", "xa6" => "xc5x9a",
  19. "xbc" => "xc5xbc", "xac" => "xc5xbb", "xbf" => "xc5xba", "xaf" => "xc5xb9",
  20. "xf1" => "xc5x84", "xD1" => "xc5x83");
  21.  return $tabela;
  22. }
  23.  
  24. function iso2utf($tekst)
  25. {
  26.  return strtr($tekst, iso_conv());
  27. }
  28.  
  29. function utf2iso($tekst)
  30. {
  31.  return strtr($tekst, array_flip(iso_conv()));
  32. }
  33.  
  34. function win2utf($tekst)
  35. {
  36.  return strtr($tekst, win_conv());
  37. }
  38.  
  39. function utf2win($tekst)
  40. {
  41.  return strtr($tekst, array_flip(win_conv()));
  42. }
  43.  
  44. function iso2win($tekst)
  45. {
  46.  return strtr($tekst, "xa1xa6xacxb1xb6xbc", "xa5x8cx8fxb9x9cx9f");
  47. }
  48.  
  49. function win2iso($tekst)
  50. {
  51.  return strtr($tekst, "xa5x8cx8fxb9x9cx9f", "xa1xa6xacxb1xb6xbc");
  52. }
  53. ?>


Konwersja we wszystkich kombinacjach win/iso/utf8.

P.S. Tam gdzie w kodzie wyswietliły sie emotki, jest ciąg "xd".
Sedziwoj
Jeśli nie korzystasz z bazy bezpośrednio (bez PHP) to możesz też raz skonwertować wszystko co jest na UTF8 i zapisywać w niej, a że wewnętrznie "myśl" ze to jest np. ISO to już nie ważne.
Znak o kodzie 96 po zapisaniu i odczycie nadal będzie miał ten kod.
A ciągła konwersja nie jest dobra, ale jeśli będziesz korzystał np. phpMyAdmin to już kłopot bo domyślne kodowanie spowoduje że znaki z UTF8 będą podwójnymi krzaczkami...
emjot27
Cytat(Hazel @ 31.08.2007, 20:20:49 ) *
  1. <?php
  2. [..]
  3.  
  4. function iso_conv()
  5. {
  6.  $tabela = Array(
  7. "xb1" => "xc4x85", "xa1" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
  8. "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
  9. "xf3" => "xc3xb3", "xD3" => "xc3x93", "xb6" => "xc5x9b", "xa6" => "xc5x9a",
  10. "xbc" => "xc5xbc", "xac" => "xc5xbb", "xbf" => "xc5xba", "xaf" => "xc5xb9",
  11. "xf1" => "xc5x84", "xD1" => "xc5x83");
  12.  return $tabela;
  13. }
  14.  
  15. function iso2utf($tekst)
  16. {
  17.  return strtr($tekst, iso_conv());
  18. }
  19.  
  20. [...]
  21. ?>


Witam, skorzystałem z tej funkcji w moim kodzie, i do tej pory działało ok, dopóki nie zauważyłem, jednak małego błędu. Mianowicie, podczas konwersji z ISO na UTF zamienia mi literę "ż" na "ź" i odwrotnie "ź" na "ż". Próbowałem znaleźć nieprawidłowości w tablicy funkcji iso_conv, ale to nie pomogło! Co może być tego przyczyną i jak sobie z tym poradzić? Czy ktoś spotkał się z podobnym błędem?

Pozdrawiam i z góry dzięki za odpowiedź.
erix
A nie lepiej korzystać po prostu z iconv, tylko wynajdywać koło na nowo...?
emjot27
Ponieważ jest tak jak napisał już kolega powyżej:
Cytat(Hazel @ 31.08.2007, 21:20:49 ) *
Są serwery, na których iconv() nie działa, lub nie funkcjonuje poprawnie. [..]
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.