Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z polskimi znakami
Rid
post
Post #1





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Witam , mam problem z polskimi znakami.PHP podczas wysyłania formularza wszystko parsuje na kod ASCII mimo że w nagłówkach mam deklaracje kodowania.Szukałem wszędzie i szukać będę dalej rozwiązania.Może to jest wina jakiegoś ustawienia w php.ini??Jest to dla mnie bardzo ważne ,gdyż w połączeni z bazą danych MYSQL nie zapisuje mi w rekordach polskich znaków.Nie uzywam żadnych funkcji typu htmlentities ,htmlspecialchars ponieważ polskie litery zapisywało mi w postaci Encji ale ,czytałem że to normalne.Problem jedynie w tym ,że kombinuje i wykombinować nie mogę dlaczego mimo deklaracji nagłówków używania przeróżnych funkcji typu ICONV nadal koduje mi w ASCII po wysłaniu formularza.
Moje ustawienia :
The Apache HTTP Web Server Version 2.2
php-5.3.3
mysql-5.1.52
WindowsXP Home
Może ktoś miał już taki problem??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
strife
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Hej,

Jaką masz deklarację kodowania w nagłowkach?

Upewnij się też czy jest poprawne kodowanie w tabelach w bazie danych.

PS. Czasami po połączeniu z bazą pomaga coś ala mysql_query("SET NAMES 'UTF8'");


--------------------
Go to the top of the page
+Quote Post
Rid
post
Post #3





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Wszystko w bazie mam zadeklowane na latin2 na php też .To nie wina sql.Może być że to Apache,ale w 90% pewien jestem że wina leży po stronie Php,mam taką funkcje:
Kod
$
charset = mysql_client_encoding($dbc);
if ( $charset != 'latin2' ) {
  mysql_set_charset('latin2',$dbc);

if (!mb_check_encoding($r_imie,'latin2') ) {
  die ('Co to za kodowanie ziom?'); // haha.gif
}  else  {
      $r_imie=iconv("ASCII" ,"latin2//TRANSLIT",$r_imie);
             $r_imie=html_entity_decode( $r_imie, ENT_QUOTES, 'latin2');
echo mb_detect_encoding($r_imie, "auto");   }

gdzie r_imie to dane z imputa-imie.Funkcja iconv konwetuje z ASCII do latin2 a mb_detect_encoding sprawdza jakie kodowania i efekt jest taki że zawsze jest ASCII mimo że dam różne kodowania ISO UTF i inne to efekt wyjściowy jest zawsze taki sam= ASCII i w głowę zachodzę dlaczego?questionmark.gif Już 4dni nad tym siedzę i pomysły już mi się kończą.Dlatego zarejestrowałem się tutaj ,może ktos miał podobny problem?questionmark.gif

Ten post edytował Rid 5.12.2010, 23:50:07
Go to the top of the page
+Quote Post
1oBuZ
post
Post #4





Grupa: Zarejestrowani
Postów: 101
Pomógł: 1
Dołączył: 11.11.2008
Skąd: Kalisz

Ostrzeżenie: (10%)
X----


Kolego uniwersalnym sposobem jest wysyłanie do bazy polskich znaków w postaci wspomnianych encji.
Nie rozmiem jednak celu trzymania polskich znaków w bazie danych.

Jeżeli dane do bazy wysyłasz z poziomu strony (przykładowo formularze), następnie je na niej odczytasz to pomimo krzaczków w bazie otrzymasz polskie znaki "bez zbędnych cudów".

Ten post edytował 1oBuZ 5.12.2010, 20:47:08


--------------------
W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi.

Dla komputera nie ma rzeczy niemożliwych z wyjątkiem tych, których od niego wymagamy.

Liczba osób w zespole programistycznym ma tendencje wzrastające, niezależnie od ilości pracy.
Go to the top of the page
+Quote Post
Rid
post
Post #5





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Trochę ucieszyła mnie ta odpowiedź , trochę zasmuciła bowiem utrudnia to manipulowaniem rekordów bazy z poziomu konsoli sql.Może jest jednak jakieś rozwiązanie-ja myślę że to złe parsowanie metody przesyłu POST.Może jakieś specjalne
ustawienia w pliku php.ini.Wiem,że istnieje możliwość zmiany sposobu przesyłu metody Post z ASCI do ANSI lub w trybie binarnym ,lecz nie wiem gdzie co i jak dokładnie ustawić.

Liczyłem na jakąś pomoc w rozwiązaniu tej kwestii.Pozostaje mi użyć funkcji htmlentities i sprowadzić polskie znaki do encji a te z koleji przerobić za pomocą str_replace aby się zapisały do bazy z języczkami ,może się uda albo się mylę. wstydnis.gif
Go to the top of the page
+Quote Post
Quadina
post
Post #6





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


Stwórz tabele z porównywaniem znaków utf8_polish_ci, koniecznie STWÓRZ table, nie zmień już istniejących bo to nic nie da. Następnie zaraz po połączeniu wykonuj tak jak napisał Ci strife:
  1. SET NAMES 'UTF8';


To jedyna możliwość, na utrzymanie wszystkich danych w utf8. Niestety po stworzeniu tablicy w innym kodowaniu i następnie przestawieniu ich na prawidłowe nie uzyska się pożądanego efektu. Nagłówki plików bazy .mdf zostaną już utworzone w innym kodowaniu i tak też będą przechowywać dane.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
Rid
post
Post #7





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Wcześniej miałem UTF8- w bazie miałem ustawione wszystko na utf8 nawet tabele ,jednakże system porównania utf8 general ci hmm -czeka mnie znowu konwersja -wszystkich dokumentów na utf8 ,ale spróbuje.Dziękuje + dla Ciebie:)

CD....utworzyłem bazę w utf8 sformatowałem dokumenty do utf8 bez boma i nadal krzaki.Użyłem funkcji sprawdzającej
Kod
$charset = mysqli_client_encoding($dbc);

echo "The current character set is: $charset\n";
wskazuje ona na UTF-8 .Ustawiłem , jeszcze
Kod
  mysqli_query("SET NAMES utf-8");
przed wysłaniem zapytania do bazy i porównanie znaków z UTF-8 polish_ci i nie pomogło.Baza była tworzona w MySql WorkBench gdzie każda kolumna w tabeli jak i sama tabela jest w UTF-8 polish_ci. Wszędzie w nagłówkach mam zadeklarowane utf-8.Może jakieś dodatkowe sugestie?questionmark.gifquestionmark.gif?

Ten post edytował Rid 8.12.2010, 00:15:47
Go to the top of the page
+Quote Post
Quadina
post
Post #8





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


  1. mysqli_query("SET NAMES utf8;");

Twoje zapytanie w poście wyżej z myślnikiem wygenerowało błąd, którego pewnie nie obsługujesz przy tak prostym zapytaniu.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
Rid
post
Post #9





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Dzięki-już poprawiłem -ale nie pomogło; ą zapisuje jako ů ,ł jako ┼é , ź- jak ┼║ itd.Już brak mi pomysłów dry.gif
Go to the top of the page
+Quote Post
Quadina
post
Post #10





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


To może jeszcze raz podsumuje.
1. Zakładasz NOWĄ bazę danych z kodowaniem utf8_polish_ci
2. Zmieniasz kodowanie strony na utf8 zarówno w typie plików jak i w meta tagach
3. Łączysz się do bazy danych zawsze z SET NAMES utf8;

Jeżeli jesteś pewien że spełniasz 3 powyższe warunki i wciąż nie działa to odezwij się do mnie na GG, bo to będzie pierwszy przypadek gdzie nie działa od kiedy pamiętam.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
Rid
post
Post #11





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


3 warunki spełnione. Baza stworzona od nowa w MySql Workbench z porównaniem znaków utf8 polish_ci.Niestety nie pomogło sad.gif Hmm jeszcze sprawdzę jakie kodowanie jest po wysłaniu formularza.

Dostałem skrypt od użytkownika celbarowicz
polegający na utworzeniu bazy danych w utf8 ,collate utf 8 polish_ci z poziomu php -bazę danych utworzyło więc musi być kodowanie w tym formacie.Mam ustawione meta ,header na utf-8 , skonwertowane pliki php na utf8 bez bom ,nawet przeglądarkę mam na utf-ie i co nadal krzaki w bazie danych ,czy apache może mieć coś z tym wspólnego??
Ps.Nie mam aktualnie żadnych funkcji typu Htmlentities.Ma ktoś jeszcze jakieś pomysły.Będę wdzięczny za każdą sugestje.
Go to the top of the page
+Quote Post
celbarowicz
post
Post #12





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


pokaż skrypt 1)tworzący bazę z tabelą,
2) zapisujący do tabeli,
3)odczytujący dane.

to co Tobie podałem działau mnie na: 1)localu, 2)cba.pl

Ten post edytował celbarowicz 9.12.2010, 23:31:48
Go to the top of the page
+Quote Post
Rid
post
Post #13





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Połączenie z bazą
Kod
header('Content-type: text/html; charset=UTF-8');
  
      

$link=mysql_connect('localhost','root','artur');

$charset = mysql_client_encoding($link);

if ( $charset != 'utf8' ) {

mysql_set_charset('utf8',$link);

}



$sql="CREATE DATABASE IF NOT EXISTS rejestr ";

mysql_query($sql) or die(mysql_error());





mysql_select_db('rejestr',$link);



$sql="CREATE TABLE IF NOT EXISTS rejstr(

id int(4) NOT NULL auto_increment,

nick varchar(30) NOT NULL ,

haslox varchar(32) NOT NULL ,

mails varchar(70) NOT NULL ,



PRIMARY KEY klucz1 (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci; ";



mysql_query($sql) or die(mysql_error());

    
?>

Skrypt zapisujący do tabeli:
Kod
require_once 'connection.php';
  
    
  $charset = mysql_client_encoding($link);

echo "The current character set is: $charset\n";  
      
mysql_query("SET NAMES utf8");

  $r_imie=html_entity_decode( $r_imie, ENT_QUOTES, 'utf8');
echo mb_detect_encoding($r_imie, "auto");
$query="INSERT INTO  rejstr(id,nick,haslox,mails)"."values(null,'$r_imie','$ghaslo','$e_mail')";

mysql_query($query, $link)
or die('Błąd zapytaniu do bazy danych.');
mysql_query("SET NAMES utf8");
mysql_close($link);


odczytującego nie mam-chodzi mi o polskie litery zapisane w bazie sql-są po prostu krzaki

Ten post edytował Rid 9.12.2010, 22:44:45
Go to the top of the page
+Quote Post
celbarowicz
post
Post #14





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


sprawdź to
  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3.  
  4.  
  5.  
  6. $link=mysql_connect('localhost','root','');
  7.  
  8. $charset = mysql_client_encoding($link);
  9.  
  10. if ( $charset != 'utf8' ) {
  11.  
  12. mysql_set_charset('utf8',$link);
  13.  
  14. }
  15.  
  16.  
  17.  
  18. $sql="CREATE DATABASE IF NOT EXISTS rejestr ";
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. mysql_select_db('rejestr',$link);
  26.  
  27.  
  28.  
  29. $sql="CREATE TABLE IF NOT EXISTS rejstr(
  30.  
  31. id int(4) NOT NULL auto_increment,
  32.  
  33. nick varchar(30) NOT NULL ,
  34.  
  35. haslox varchar(32) NOT NULL ,
  36.  
  37. mails varchar(70) NOT NULL ,
  38.  
  39.  
  40.  
  41. PRIMARY KEY klucz1 (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci; ";
  42.  
  43.  
  44.  
  45.  
  46.  
  47. ?>
  48.  



zapis do bazy
  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3.  
  4.  
  5.  
  6. $link=mysql_connect('localhost','root','');
  7.  
  8. $charset = mysql_client_encoding($link);
  9.  
  10. if ( $charset != 'utf8' ) {
  11.  
  12. mysql_set_charset('utf8',$link);
  13.  
  14. }
  15. mysql_select_db('rejestr',$link);
  16.  
  17. $r_imie='ąśźćłóę';
  18. $ghaslo='hasło_ążśźć';
  19. $e_mail='email_ęółń';
  20. $query="INSERT INTO rejstr (id,nick,haslox,mails) VALUES ('','$r_imie','$ghaslo','$e_mail')";
  21.  
  22. mysql_query($query, $link)
  23. or die('Błąd zapytaniu do bazy danych.');
  24. mysql_query("SET NAMES utf8");
  25. mysql_close($link);
  26.  
  27.  
  28. ?>
  29.  

i teraz speawdź co jest w bazie

Ten post edytował celbarowicz 9.12.2010, 23:11:20
Go to the top of the page
+Quote Post
Rid
post
Post #15





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


krzaki sad.gif

Na sztywno nie przyniosło rezultatu ,sprawdzanie bazy jaki i zmiennej $r_imie wykazuje po przesłaniu że jest w utf8 hmm withstupidsmiley.gif
Go to the top of the page
+Quote Post
celbarowicz
post
Post #16





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


korzystam z wampa, używając tych skryptów dokładnie tak jak podałem w bazie mam polski znaki.

withstupidsmiley.gif withstupidsmiley.gif
Go to the top of the page
+Quote Post
Rid
post
Post #17





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Dziękuję za uwagę party.gif Męczę się już parę dni nad tym hmm-może niewłaściwa konfiguracja serwera z php i mysql może te wersje nie współgrają ze soba sciana.gif

Możesz mi jeszcze powiedzieć jaką wersje php masz bo na mojej to czytałem że nawet xdebuger nie pójdzie może to jest nie właściwa wersja dry.gif
Go to the top of the page
+Quote Post
celbarowicz
post
Post #18





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


WAMPSERVER 2.0
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: 20.08.2025 - 16:06