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?'); // (IMG:style_emoticons/default/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?(IMG:style_emoticons/default/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?(IMG:style_emoticons/default/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
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ę. (IMG:style_emoticons/default/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.
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?(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.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.
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 (IMG:style_emoticons/default/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.
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/sad.gif)

Na sztywno nie przyniosło rezultatu ,sprawdzanie bazy jaki i zmiennej $r_imie wykazuje po przesłaniu że jest w utf8 hmm (IMG:style_emoticons/default/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.

(IMG:style_emoticons/default/withstupidsmiley.gif) (IMG:style_emoticons/default/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ę (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 21:32