Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+mysql] Jak wykorzystać utf8 do tworzenia aplikacji?
Wickerman
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.09.2009

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


Witam,
Mam następujący problem:
Chcę stworzyć aplikację w PHP z wykorzystaniem bazy danych w mysql-u. Tworzę formularz kodowany w utf-8, z którego informacje przekazywane są metodą POST do pliku php przetwarzającego skrypt umieszczający wprowadzone dane do bazy. Problem polega na tym, że wprowadzając polskie znaki w formularzu, w bazie pojawiają się krzaki.

Problem co gorsza występuje na poziomie PHP, bo jak wyświetlę sobie zmienną przechowującą wyraz z polskimi literami przed wpisaniem do bazy, to na ekranie również dostaję krzaki. Zmienną tą pobieram za pom. funkcji htmlentities i przypuszczam, że to ona może coś mieszać. Dodam jeszcze, że pomimo ustawienia kodowania w metatagu na utf8 i zakodowaniu samego pliku w utf (notepad++) na stronie również odziwo wyświetlają się krzaczki. Strona uruchamiana jest na lokalnym serwerze Wamp.

Dodam jeszcze, że baza danych została stworzona z utf8 (tak samo jak tablice), parametry połączenia skryptu PHP z mysql też są poustawiane na utf8 (polecenie status z mysql zwraca dla connection, server, db i client - utf8) za pomocą takich poleceń jak (przykładowo):
  1. mysql_query('SET character_set_connection=utf8;');

  1. mysql_query('SET NAMES utf8;');

Pliki formularza i skryptu PHP są zakodowane w utf-8 przy użyciu programu notepad++.

Podsumowując: Jak stworzyć fformularz i bazę danych, aby zapis do i odczyt z bazy przy pomocy php odbywał się przy pomocy kodowania utf8 i poprawnie wyświetlał wszystkie znaki.

Ten post edytował Wickerman 27.06.2010, 13:45:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Wickerman
post
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.09.2009

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


Sytuacja poniekąd troszeczkę się wyjaśniła, wyrzuciłem htmletities i skrypt nie krzaczy na poziomie PHP. Także problem z krzaczkami w plikach php został zażegnany. Kodowanie oczywiście jest wszędzie ustawione na utf-8. Problem pozostał z bazą danych.

Wpisując tekst w formularzu "Pięść", w bazie danych zapisuje się "Pi?(IMG:style_emoticons/default/questionmark.gif) ". Oto skrypt wprowadzający do BD:

  1. <?php
  2.  
  3. //Pobranie zmiennych wpisanych w formularza do tablicy globalnej $_POST
  4. $opis = $_POST['opis'];
  5.  
  6. echo 'Wprowadzono: '.$opis.'<br>';
  7.  
  8. $db_host = 'localhost';
  9. $db_username = 'root';
  10. $db_password = '';
  11. $db_database = 'kodowanie';
  12. $query = 'INSERT INTO kod VALUES ("'.$opis.'");';
  13.  
  14.  
  15. $link = mysql_connect($db_host,$db_username,$db_password);
  16.  
  17. mysql_select_db($db_database);
  18.  
  19. mysql_query('SET character_set_connection=utf8;');
  20. mysql_query('SET character_set_client=utf8;');
  21. mysql_query('SET character_set_results=utf8;');
  22. //mysql_query('SET character_set_server=utf8;');
  23. //mysql_query('SET character_set_db=utf8;');
  24. mysql_query('SET NAMES utf8 COLLATE utf8_polish_ci;');
  25.  
  26. $result = mysql_query($query);
  27. if (!$result)
  28. {
  29. die ('Błąd zapytania SQL: '.mysql_error());
  30.  
  31. }
  32.  
  33. mysql_close($link);
  34.  
  35. /* (...) */
  36.  
  37. ?>


I jeszcze mała diagnostyka bazy danych:
  1. mysql> SHOW CREATE TABLE kod;
  2. +-------+----------------------------------------------------------
  3. | TABLE | CREATE TABLE
  4. +-------+----------------------------------------------------------
  5. | kod | CREATE TABLE `kod` (
  6. `opis` varchar(200) CHARACTER SET utf8 NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci |
  8. +-------+----------------------------------------------------------


Baza danych:
  1. mysql> SHOW CREATE DATABASE kodowanie;
  2. +-----------+--------------------------------------------------------------------+
  3. | DATABASE | CREATE DATABASE |
  4. +-----------+--------------------------------------------------------------------+
  5. | kodowanie | CREATE DATABASE `kodowanie` /*!40100 DEFAULT CHARACTER SET utf8 */ |
  6. +-----------+--------------------------------------------------------------------+


STATUS:
  1. Current DATABASE: kodowanie
  2. Current user: root@localhost
  3. SSL: NOT IN USE
  4. USING delimiter: ;
  5. Server version: 5.1.36-community-log MySQL Community Server (GPL)
  6. Protocol version: 10
  7. Connection: localhost via TCP/IP
  8. Server characterset: utf8
  9. Db characterset: utf8
  10. Client characterset: utf8
  11. Conn. characterset: utf8


Sorry za format, ale przeprowadzam testy w warunkach "polowych" żeby sobie nie namieszać w dotychczasowej pracy.
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: 24.12.2025 - 03:15