Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [MYSQL] Polskie znaki

Napisany przez: webdice 1.01.2009, 17:21:06

Wiele osób ma problem z polskimi znakami w bazie danych, dlatego postanowiłem jakiś czas temu napisać artykuł na łamach wortalu. Mam nadzieje że będzie pomocny, a forum nie będzie zaśmiecane kolejnymi pytaniami dotyczącymi tego problemu.

Artykuł znajduje się http://php.pl/wortal/artykuly/pomysly_porady_sugestie_dobre_nawyki/polskie_znaki_a_mysql.

Napisany przez: obelix94 2.01.2009, 23:40:17

Niestety taki ktoś jak ja nie umie szukać, przepraszam.

Napisany przez: Legro 5.01.2009, 19:16:22

Artykuł? Przecież to sie nie nadaje na poradnik, a co dopiero na artykuł. Haha biggrin.gif

Napisany przez: thomson89 29.03.2009, 20:58:10

Jakby komuś nie szło:


Pozdrawiam!

Napisany przez: Adiqus 2.06.2009, 12:37:35

a mnie to się podoba ... na pewno się kiedyś przyda smile.gif

Napisany przez: GregoryW 18.09.2009, 14:54:03

mam pytanie, jeśli wybieram zawsze utf8 polski i 'utf8_polish_ci', czy to ma jakieś znaczenie, niżeli wybierałbym 'utf8_unicode_ci'?

Napisany przez: erix 18.09.2009, 15:17:42

Tak. Przy utf8_polish* polskie znaki diakrytyczne są uwzględniane przy sortowaniu. W przypadku pozostałych zestawów porównań - polskie litery są za literą Z w alfabecie (wxyząć).

Napisany przez: thomson89 29.10.2009, 17:03:05

Jeżeli robisz zwykły blog to wystraczy unicode. Jak, sklep, czy coś z szukajką: polish.

Napisany przez: aqun 17.11.2009, 22:37:24

Polski i hiszpański na tej samej stronie jednocześnie - czy to można zrobić?
Nie chodzi mi o przełączenie z jednej wersji językowej na inną, na ten temat znalazłem porady.
Problem jest taki:
w bazie MySQL chciałbym umieścić teksty polskie i hiszpańskie, a na stronie wyświetlać je tak żeby były widoczne
jednocześnie. Jeżeli to jest do zrobienia proszę o podanie jak poustawiać kodowanie w bazie i na stronie.
Będę też wdzięczny za uzasadnienie (jeżeli się nie da) to dlaczego, bo dociekliwy jestem i pewnie będę jakoś
na własną rękę zgłębiał temat, a po co tracić czas na wyważanie otwartych drzwi. Pozdro dla wszystkich.

Napisany przez: mech 17.11.2009, 22:51:02

A dlaczego w różnych przeglądarkach różnie działają kodowania? Czy powinienem do każdej przeglądarki wstawiać osobne kodowanie? Jak by to rozwiązać?

Napisany przez: thomson89 17.11.2009, 23:22:11

Może źle masz ustawione kodowanie, a każda przeglądarka ma inne kodowanie domyślne - stąd te różnice.


Napisany przez: mech 18.11.2009, 08:41:44

To jak najlepiej to rozwiązać?
W jeden plik ładować kilka tablic czy mam tworzyć oddzielne pliki do każdej przeglądarki?

Napisany przez: Meares 18.11.2009, 08:52:58

@aqun: Stwórz dwie kolumny - jedną dla polskich tekstów (utf8_polish_ci), a druga dla hiszpańskich (utf8_spanish_ci/utf8_spanish2_ci [nie mam pojęcia czym różni się spanish od spanish2]).

@mech: Nie jestem pewny, ale moim zdaniem wystarczy poprosić użytkowników, aby zmienili kodowanie w przeglądarkach na "Wybór automatyczny" (tak się to zwie w Operze). Jeśli zmienię sobie na jakieś inne, to jasne, że będzie źle wyświetlało polskie (i nie tylko) znaki.

Napisany przez: aqun 18.11.2009, 23:41:06

Dzięki Meares, właśnie skończyłem, mam hiszpańskie i polskie znaki, dla porządku trzeba dodać że na stronie kodowanie trzeba ustawić na UTF-8. Miałem ISO 8859-2, więc wszystko trzeba było przekonwertować, no ale jest ok.
Pozdro dla wszystkich.

Napisany przez: kupilemsobieksiazke 16.12.2009, 20:45:00

Mam pytanie... DOPIERO zaczynam i dzisiaj odebrałem z poczty "PHP i MySQL Tworzenie stron WWW Vademecum Profesjonalisty". Słuchajcie... to dopiero php. Zamiast instalować wszystkiego po kolei zainstalowałem xamppa. Trochę minęło zanim się w tym wszystkim połapałem.

Na IE wszystko działa ok - wyświetla się ąśćę... ale normalnie korzystam z Opery i tam zamiast ś dziwny kwadracik, a o dziwo np. ć wyświetla się dobrze. Nie znalazłem na forum rozwiązania takiego problemu.
Wkleiłem <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> do jednego pliku z płytki i wszystkie polskie znaki to kwadraty, a na IE dalej wszystko ok.

Z góry dzięki, jak ktoś mógłby mi pomóc smile.gif

Napisany przez: thomson89 16.12.2009, 23:16:29

Zainstaluj sobie notepad++ i kliknij konwertuj na utf-8. Lub poprzez gżegżółkę...

Napisany przez: kupilemsobieksiazke 17.12.2009, 17:55:54

Działa smile.gif A jakby wrzucać na serwer hostingowy (nie jakiś localhost), to też trzeba tak konwertować?

Z góry dzięki. Już pomogłeś.

Napisany przez: thomson89 17.12.2009, 17:59:14

Zależy jaki. Mam obecnie serwer na prohost. Kodowanie miałem po prostu ustawione na utf-8, ale po wrzuceniu na tenże serwer musiałem KONWERTOWAĆ każdy plik do utf-8 bez bom. Inaczej plik wariował. Np. htaccess, zamiast plików podanych w <file plik> zamieniał wszystkie pliki na te parsowane przez php. Także były różne głupoty tam tongue.gif

Napisany przez: kupilemsobieksiazke 17.12.2009, 19:01:08

Więc tak naprawdę nie ma na to sposobu? ;/

Napisany przez: thomson89 17.12.2009, 19:23:00

Cytat(kupilemsobieksiazke @ 17.12.2009, 19:01:08 ) *
Więc tak naprawdę nie ma na to sposobu? ;/


Sposób jest, lecz nie ma reguły. Najlepiej jest konwertować wszystko na utf-8 bez bom i powinno wszędzie śmigać.

Napisany przez: kupilemsobieksiazke 19.12.2009, 00:02:03

Znowu źle ;/ Jak w IE dobrze, to OPERA się sypie... Albo na odwrót. Mam problem z zapisem do pliku tekstowego (nawet nie tyle, że źle odczytuje)... Ma problem z odczytaniem czegoś takiego "\n" i na pewno jest to dobrze, bo to przykład z książki. Podejrzewam, że to wszystko ściśle powiązane... A uczę się od środy.

Napisany przez: thomson89 19.12.2009, 10:37:51

nl2br

Hej, a zadeklarowałeś na początku strony w head, że to utf-8? Jak cos zapisujesz do pliku, to plik najpierw przekonwertuj na utf-8 a potem cos zapisuj.

Napisany przez: kupilemsobieksiazke 20.12.2009, 17:49:02

No hej

<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">

takie coś dodaję.

Mam taki problem. Koduję wszystko w UTF-8 bez iso cośtamcoś 2. I zapisuję do pliku w notatniku ciąg znaków ąęśćńźżół z "\n" na końcu, polskie znaki ok, ale na końcu jest kwadracik, a miało być złamanie linii. Natomiast zapisując to wszystko do Excela, złamanie linii działa (niższy wiersz),a polskie znaki wyglądają tak: ąęśćńźżół

Wszędzie koduję na UTF-8 za pomocą notepad++ (w plikach .html i .php). Jak kombinowałem i przekonwertowałem plik excela na ascii to wyszło ok, ale tak to się sypie...

Napisany przez: thomson89 20.12.2009, 21:00:36

Cytat(kupilemsobieksiazke @ 20.12.2009, 17:49:02 ) *
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
(...)
Wszędzie koduję na UTF-8...


Z naciskiem na iso-8859-2 i UTF-8 biggrin.gif

Daj tak:
  1. <http://december.com/html/4/element/meta.html http-equiv="Content-type" content="text/html; charset=utf-8">

Napisany przez: kupilemsobieksiazke 21.12.2009, 10:56:02

Właśnie tak miałem we wszystkich plikach php i html. Przy zapisie do notatnika (.txt) zamiast prawidłowej interpretacji "\n" kwadracik, a jak chcę tu wkleić ten kwadracik, to mi się robi nowa linia...
O właśnie tak. Tu go nie widać. Znalazłem tylko jedno rozwiązanie na prawidłowy odczyt z tego pliku (.txt) mianowicie:

while (!feof($wp))
{
$znak = fgetc($wp);
echo ($znak=="\n" ? "<br />": $znak);
}

Wtedy to interpretuje dziwny kwadracik jako łamanie linii...

Natomiast przy odczycie pliku z excela wszystko jest ok, a w samym excelu łamie linie poprawnie (robi kolejne wiersze), ale polskie znaki... Trzeba cały czas konwertować na ascii i wtedy jako tako, ale przy zapisie znowu zapisują się szlaczki.

Z kolei wczoraj robiłem banalny profil logowania, na podstawie tych wszytkich informacji i serwer (110mb.com), który obsługuje php5 i mysql, nie interpretuje "\n" oraz "\t", zamiast tego po zapisie wyświetla się "n" oraz "t".


Napisany przez: webdice 21.12.2009, 11:06:05

Ułomny notatnik ignoruje sam znak nowej linii. Nie mniej jednak on tam jest. Jeśli chcesz aby w notatniku tekst był poprawnie wyświetlany musisz zrobić tak:

Kod
pierwsza linia\r\ndruga linia

Napisany przez: kupilemsobieksiazke 21.12.2009, 11:30:06

Dzięki smile.gif Jeden problem rozwiązany. Teraz tylko... co z dziwnymi znakami w excelu i łamaniem lini na serwerze, gdzie wszystkie backslashe są zastępowane niczym.

To mój notatnik jest zły? Czy to autorzy książki nie zadbali o przenośność kodu?

Napisany przez: thomson89 21.12.2009, 15:25:25

Excel jest zupełnie inaczej kodowany. Poszukaj coś w stylu "otwieranie plików doc php".


A jak dajesz, to \n? W ciągu " czy ' (choć nie jestem pewien czy to jakaś różnica jest).

Napisany przez: kupilemsobieksiazke 21.12.2009, 16:21:20

Jest różnica. Taki znak tylko w ciągu "" podwójnych nawiasów. Do wywoływania używam zawsze echo. Okok poszukam.

Napisany przez: kuxma 22.12.2009, 01:54:21

Witam. Jestem tu nowy i mam problem z polskimi znakami. Oto co zrobiłem

w pliku php na stronie umieściłem:

  1. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />


na serwerze w tabeli zmieniłem kodowanie znaków na utf8_polish_ci

w pliku coon.php
  1. <?
  2. http://www.php.net/define('DB_HOST','xxxxxxxx.pll');
  3. http://www.php.net/define('DB_USER','lużytkownik'); //wpisz nazwęużytkownika bazy
  4.  
  5. danych
  6. http://www.php.net/define('DB_PASS','hasło'); //wpisz hasło dla tego użytkownika
  7. http://www.php.net/define('DB_DB','xxxxx_xxxx_pl');
  8.  
  9. $connect = http://www.php.net/mysql_connect(DB_HOST, DB_USER, DB_PASS)
  10. or http://www.php.net/die('Nie udało połączyc się z bazą danych. '.http://www.php.net/mysql_error());
  11.  
  12. http://www.php.net/mysql_query( "set names 'utf8'") ;
  13. http://www.php.net/mysql_query( "SET CHARACTER_SET utf8_unicode_ci'");
  14.  
  15. http://www.php.net/mysql_select_db(DB_DB,$connect) or http://www.php.net/die('połonczano
  16.  
  17. sie.'.http://www.php.net/mysql_error());
  18.  
  19. ?>


a to kod php w kórym chce mieć polskie znaki
  1. <?
  2.  
  3. require('coon.php');
  4.  
  5.  
  6.  
  7.  
  8. $login = http://www.php.net/mysql_real_escape_string (http://www.php.net/trim($_POST['login']));
  9.  
  10. $wpis = http://www.php.net/mysql_real_escape_string (http://www.php.net/trim($_POST['wpis']));
  11.  
  12. if($login and $wpis) {
  13.  
  14.  
  15. $zapytanie="INSERT INTO ksiega (login,wpis) VALUES('$login','$wpis')";
  16.  
  17. http://www.php.net/mysql_query($zapytanie) or http://www.php.net/die("Nie dodano rekordu" );
  18.  
  19. http://www.php.net/echo('Dodano wpis '.$login.' ');
  20. }
  21.  
  22. ?>
  23.  
  24. <h1 align="center"><font size="5" color="#FF0000">Dodaj wpis</font></h1>
  25.  
  26. <form action="ksiega.php" method="post">
  27.  
  28. <strong>Login:</strong><br><input name="login" type="text" value="" /><br>
  29.  
  30. <strong>Twój wpis:</strong><br><input name="wpis" type="text" value="" size="73" /><br>
  31.  
  32. <input type="submit" value="Dodaj" />
  33.  
  34. </form>
  35.  
  36. <br><br>
  37. <?php
  38. require('coon.php');
  39. $query="SELECT * FROM ksiega";
  40. $result=http://www.php.net/mysql_query($query);
  41.  
  42. $num=http://www.php.net/mysql_numrows($result);
  43.  
  44. http://www.php.net/mysql_close();
  45.  
  46. http://www.php.net/echo "<b><center>Wasze wpisy</center></b><br><br>";
  47.  
  48. $i=0;
  49. while ($i < $num) {
  50.  
  51. $login=http://www.php.net/mysql_result($result,$i,"login");
  52.  
  53. $wpis=http://www.php.net/mysql_result($result,$i,"wpis");
  54.  
  55.  
  56. http://www.php.net/echo "<b>Login: $login <br> Wpis: $wpis </b><hr><br>";
  57.  
  58. $i++;
  59. }
  60.  
  61. ?>


Pomocy już nie wiem co mam robić

Napisany przez: webdice 22.12.2009, 09:32:12

Jak coś to:

  1. http://www.php.net/mysql_query( "set names utf8") ;

Napisany przez: kuxma 22.12.2009, 10:52:37

To taż nic nie daje. W phpMyAdmin próbowałem zmienić rekord na polskie znaki ą ś ć ę . Ale po tej zmienie nadal pojawiają się znaki ? ? ? ?. A tabela i baza danych jest w systemie kodowania utf8_polish_ci. Może coś w serwerze ustawić??

Napisany przez: webdice 22.12.2009, 11:07:13

Mówisz utf_polish_ci, a w kodzie masz:

  1. http://www.php.net/mysql_query( "SET CHARACTER_SET utf8_unicode_ci'");


Zdecyduj się na jedno. Poza tym jakie masz kodowanie pliku?

Napisany przez: kuxma 22.12.2009, 11:28:44

przed chwilą zmieniłem wszystko na utf8_unicode_ci. A z tym kodowaniem pliku to trochę nie rozumiem jestem początkujący


Napisany przez: webdice 22.12.2009, 11:51:20

Cytat(kuxma @ 22.12.2009, 11:28:44 ) *
(...). A z tym kodowaniem pliku to trochę nie rozumiem jestem początkujący


Co nie zmienia faktu że w używaniu mózgu początkujący nie jesteś. Na forum była masa tematów na ten temat, w sieci jeszcze więcej.

Napisany przez: kuxma 22.12.2009, 13:12:51

Wiem co było źle Metoda porównywania napisów W TABELI była ustawiona na latin1_swedish_ci. Przepraszam za kłopot

Napisany przez: dyziekwik 31.03.2010, 21:48:22

witam, nie jestem ekspertem, ale chciałbym się podzielić spostrzeżeniem. ustawiałem wszystko na utf8 tak jak mówiliście i dupa, wziąłem więc pajączka (bo w tym zwykłem pisywać) i tam ustawiłem kodowanie na utf8 i odczyt dokumentu w tym samym kodowaniu. jeśli w kodzie strony mamy krzaki to trzeba je wtedy zamienić na polskie litery i zapisać w utf8. Mi teraz chodzi.

Napisany przez: webdice 31.03.2010, 22:11:49

Niczego nowego nie odkryłeś, mówisz o kodowaniu pliku, a o tym było już kilkanaście tematów na forum.

Napisany przez: Daniel Meger 1.05.2010, 15:55:52

Jeżeli używasz UTF-8, zapisujesz w UTF-8, dodajesz odpowiednie nagłówki HTML dla UTF-8, a serwer i tak to czyta 'po swojemu' - dopisz na każdej stronie php nagłówek, że plik jest zakodowany w UTF-8:

  1. <?php
  2. http://www.php.net/header('Content-type: text/html; charset=utf-8');
  3. ?>

Musisz to oczywiście dopisać przed wysłaniem nagłówków, a więc przed jakimkolwiek znakiem, tzn. przed <?php nie może być ani spacji ani entera, ani żadnego innego znaku.

Do tego jak baza jest w UTF-8, to wszystko będzie już działać poprawnie.

Wiem, że mogę się tutaj narazić na pewną krytykę i wiem, że to OT, ale moim zdaniem warto (właśnie w kontekście charsetów) z pajączków, zajączków i innych takich wynalazków przesiąść się na porządny IDE (polecam darmowy NetBeans).

Napisany przez: darophp 10.08.2010, 08:25:20

Tak, ja bym to uniemożliwił.

Napisany przez: monami 10.08.2010, 08:32:52

Cytat
Tak, ja bym to uniemożliwił.

Jeżeli to odpowiedz na post o polskich znakach w loginie i hasle przy rejestracji to dziekuje.
Usunelam post zaraz po dodaniu bo cos na temat znalazlam na innej stronie, nie zauwazylam odpowiedzi.

Napisany przez: pag-r 24.08.2010, 18:18:29

Nie chce tworzyć nowego tematu,a zapewne ktoś miał do czynienia z takim problemem. Mianowicie mam bazę zapisaną w latin2. Żeby wyświetlić dane konwertuje je do utf-8 (iconv()), ponieważ moduł do przetwarzania tych danych jest w utf-8. Ale kiedy cokolwiek zmienię w polach edycji czy to input czy textarea i prześle te dane POST'em, są już nie do odczytania. Pojawiają się symbole nieprawidłowego kodowania typu zamiast litery ł pojawia się A z kółkiem. W każdym razie kodowanie się psuje. W jaki sposób sprawić by te dane były kodowane w jakiś ze standardowo przyjętych, żeby móc z nimi cokolwiek sensownego zrobić?

Napisany przez: k_rogalski 30.11.2010, 22:03:32

Modyfikuje skryp z generatora formularza. Chce by w nazwisku dostepne byly polskie znaki. Pierwszy problem to wyslwietlanie polskich zankow po wyslaniu formularz. Formularz akceptuje i przesyla je do mysql natomiast zupenie nie akceptuje "o z kreska" ani w formie "o z kreska" a ni w formie utf. W przypadku wpisania "o z kreska" do formularza wyskakuje info, ze znak niedozwolony.

Druga sprawa to iz w bazie, polskie znaki zapisane sa unicodem, a nie forma graficzna(a z ogonkiem itp). Metoda porownania to latin2_general_ci.Prosze o info jak to zmienic. Ponizej skrypt. Probowalem mysql_query('SET NAMES latin2_general_ci'); i mysql_query('SET NAMES utf8'); ale nie wiem czy w dobrym miejscu wstawiam...

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<?php
include("global.inc.php");
$errors=0;
$error="Formularz zostal niepoprawnie wypelniony. Sporboj ponownie. Ponzej znajduja sie popelnione bledy<ul>";
pt_register('POST','Email');
pt_register('POST','haslo');
pt_register('POST','nazwisko');
if($Email=="" || $haslo=="" ){
$errors=1;
$error.="<li>Zadne pole nie moze poozstawac bez danych. Prosze wrocic i rozpoczac od nowa.";
}
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$Email)){
$error.="<li>Niepoprawna forma email";
$errors=1;
}
if(strlen ($haslo) <3 || strlen ($haslo)> 16)
{
$errors=1;
$error.="<li>Haslo musi miec conajmniej 10 znakow. Nie wiecej niz 16.";
}
if(!eregi("^[a-zA-Z;ÓóĄąĆćĘꣳŃńŚśŹźŻż]*$",$nazwisko)){
$error.="<li>Niepoprawne znaki";
$errors=1;
}
if($errors==1) echo $error;
else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/"));
$message="Ponizsze dane zostaly zapisane na serwerze Dk service
Email: ".$Email."
haslo: ".$haslo."
nazwisko: ".$nazwisko."
Jesli chcesz zmodyfikowac dane www.google.pl";
$message = stripslashes($message);
mail("testi@o2.pl","Form Submitted at your website",$message,"From: phpFormGenerator");
mail("$Email","Form Submitted at your website",$message,"From: phpFormGenerator");


$link = mysql_connect("localhost","xxxx","xxxxxx");
mysql_select_db("guingamp_cv",$link);



mysql_query('SET NAMES utf8);

mysql_query('SET NAMES latin2_general_ci');


$query = mysql_query("SELECT * FROM firma WHERE email = '$Email'||'$nazwisko'");
if( mysql_num_rows($query) != 0)

echo 'Apikacja zostala juz wczesniej zlozona.<a href="http://www.dkservice.eu/phpformgenerator/use/firma/form1.html"><input type="button" value="cofnij" /></a>
';

else {

$query="insert into firma (Email,haslo,nazwisko) values ('".$Email."',sha1(md5('".$haslo."')),'".$nazwisko."')";

mysql_query($query);
$make=fopen("admin/data.dat","a");
$to_put="";
$to_put .= $Email."|".$haslo."|".$nazwisko."
";
fwrite($make,$to_put);

?>




<h2>Dziekujemy za wypelnienie aplikacji</h2>

<table width=50%>
<tr><td>Email: </td><td> <?php echo $Email; ?> </td></tr>
<tr><td>haslo: </td><td> <?php echo $haslo; ?> </td></tr>
<tr><td>nazwisko: </td><td> <?php echo $nazwisko; ?> </td></tr>
</table>


<?php
}}
?>

Napisany przez: ixpack 3.12.2010, 18:05:41

  1. http://www.php.net/mysql_query('SET NAMES utf8);
  2.  
  3. mysql_query('SET NAMES latin2_general_ci');


A czemu ustawiasz najpierw utf a później latin? Jak kodujesz dane w bazie? Ustaw kolumnę z nazwiskami na utf. I jak dodajesz nazwisko to ustaw dane jako utf, tak samo chyba jak nazwisko wyciągasz.

Jeżeli masz: dokument w utf8, dodajesz do bazy dane z tego dokumentu, ale przedtem ustawiasz names utf8 i jeżeli kolumna do której dodajesz dane utf8 jest w systemie kodowania utf8 I system porównania jest utf8 to musi działać.

Tak samo z wyciąganiem danych.

Napisany przez: Rid 12.12.2010, 15:54:10

Mam zadeklarowane nagółwki header, meta w utf-8 ,pliki skonwertowane do utf8 bez bom. Cały serwer zainstalowany od nowa:
Apache 2.2
PHP 5.2.15 V6
MySQL 5.1.52 na win XP.Baza była utworzona za pomocą skryptu

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

$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());
więc nie ma możliwości żeby była kodowana inaczej jak w UTF-8 i nie wiem dlaczego koduje mi w latin1 po wysłaniu formularza,a w bazie są krzaki.
Czy ktoś mógłby ,polecić mi jakiś naprawde ,dobry program serwerowy z Apache ,PHP i MySQL?Już kilka razy reinstalowałem swój serwer i w rezultacie otrzymuje inne kodowanie niż zadeklarowane.Ręce opadają. withstupidsmiley.gif

Napisany przez: Zyx 12.12.2010, 15:59:58

Ale na kolumny to już kodowania nie ustawiłeś.

Napisany przez: Rid 12.12.2010, 16:10:39

Popatrzyłem w MySQL Workbench i kolumny utworzyły się w UTF8 polish_ci więc wszystko wydaje się być wporządku.

Napisany przez: rulespl 14.01.2011, 12:38:16

Witam
Nie wiem dlaczego ale cały czas pokazują mi się krzaczki zamiast polskich znaków. Używam kodowania UTF-8;
Oto jak wygląda sytuacja:
-Pliki są kodowane w UTF-8 bez DOM (zwykłe utf-8 też sprawdzałem) - ustawiłem poprzez notepad ++
-Kodowanie na stronie:

  1. <http://december.com/html/4/element/meta.html http-equiv="Content-type" content="text/html; charset=UTF-8" />

-przy połączenu z bazą mam:
  1. http://www.php.net/mysql_query("SET NAMES utf8'");
  2. http://www.php.net/mysql_query("SET CHARACTER_SET utf8_unicode_ci");

-baza tabela i kolumny mają poustawiane kodowanie utf8_unicode_ci

Dodatkowo po wpisaniu
  1. SHOW VARIABLES LIKE 'character\_set\_%';


Pokazuje mi:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8

Z tego widzę, że character_set_server ma ustawione latin1, czy to powoduję problem? Jeśli tak, czy da się to jakoś obejść bez zmiany ustawień całego serwera?

Jeszcze jedno. Przy dodawaniu wartości z poziomu php nie wstawia polskich znaków. To chyba jest problem z kodowaniem serwera, ale jak to zmienić, żeby inne bazy na serwerze nie wykrzaczyły się przy okazji?

Napisany przez: webdice 14.01.2011, 13:20:11

Poczytaj o AddDefaultCharset w Apache.

P.S. Bez BOM, nie DOM.

Napisany przez: rulespl 14.01.2011, 13:32:55

No ta miałem na myśli oczywiście BOM

Ustawiłem w .htaccess

AddDefaultCharset UTF-8

Nic nie dało, jeszcze dodam, że w pliku na górze mam także:

  1. http://www.php.net/header('Content-type: text/html; charset=utf-8');

Napisany przez: webdice 14.01.2011, 14:17:49

Jak wygląda kodowanie tabel oraz kolumn?

Napisany przez: rulespl 17.01.2011, 15:10:42

Cytat(webdice @ 14.01.2011, 14:17:49 ) *
Jak wygląda kodowanie tabel oraz kolumn?


Kodowanie bazy, tabel jak i poszczególnych kolumn jest utf8_unicode_ci


Problem został rozwiązany, był banalny błąd w zapytaniu:
  1. mysql_query("SET NAMES 'utf8'");


Brakowało apostrofu przed 'utf8'

Dzięki za pomoc

Napisany przez: marlynbyr82 22.03.2011, 04:51:35

Problem jest taki:
w bazie MySQL chciałbym umieścić teksty polskie i hiszpańskie, a na stronie wyświetlać je tak żeby były widoczne
jednocześnie. smile.gif

Napisany przez: webdice 22.03.2011, 10:17:32

Poczytaj o UTF.

Napisany przez: -san- 24.03.2011, 19:41:43

musisz wstawic jednoliwe kogodanie
przesył danych z bazy,baza,tabele,struktura,pliki php

Napisany przez: JoShiMa 5.04.2011, 12:40:00

Pomóżcie bo wymiękłam. Kodowanie dokumentu utf-8, baza i tabele utf8_general_ci. Wstawianie i odczytywanie rekordów przwidłowo, bez krzaków.Ale zapytanie:

  1. SELECT id FROM tabela WHERE name='ń'


zwraca id dla name = n

poza tym jeśli w bazie jest rekord name=ń to wpisanie rekordu z name=n jest niemożliwe bo wrzeszczy iż jest duplikat. W czym rzecz?

Napisany przez: Hexonex 27.05.2011, 02:16:14

Witam, robię wszystko tak jak piszecie ale nadal mam problem ze znakami. Z początku były znaki zapytania zamiast polskich znaków (oprócz litery "ó"). Gdy dodałem

  1. mysql_query('SET NAMES utf8');
  2. mysql_query('SET CHARACTER_SET utf8_unicode_ci');
  3.  


Zamiast znaków zapytania pojawiły mi się AÂĄbÌ¿³ó.
Już nie wiem co mam robić, zważając na fakt, że jak nie dodałem


  1. mysql_query('SET NAMES utf8');
  2. mysql_query('SET CHARACTER_SET utf8_unicode_ci');
  3.  

to przynajmniej miałem polskie znaki w nowo napisanych postach, zaś teraz to nie mam w ogóle.

Moja strona została przeniesiona z friko.pl, na proserwer.pl.

Napisany przez: worek 16.06.2011, 15:29:46

Ja jako panaceum na polskie znaki używam funkcji do konwersji na encje dla polskich liter. I to mi w zupełności styka bo mam gdzieś jakie będzie ustawione kodowanie w przeglądarce, i tak mi się polskie znaki zawsze wyświetlą czy to utf czy iso.

Napisany przez: toaspzoo 16.06.2011, 15:49:08

Kod
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-2" />

Napisany przez: Gość 4.08.2011, 00:00:07

smile.gif

Napisany przez: kardi3 4.11.2011, 11:31:28

Witam,
przejrzałem tematy dotyczące polskich znaków i niestety nie znalazłem rozwiązania mojego problemu.
Zrobiłem to co napisane w artykule na wstępie tego tematu,nie pomogło.
W bazie danych są wyświetlane polskie znaki, natomiast gdy przychodzi do wyświetlenia elementu bazy na stronie to pojawiają się krzaczki. Wyświetla się jedynie litera ó.

Efekt jest widoczny http://www.ukskrzeszowice.pl/baza_liga/wyswietl_strzelcow.php
Wszystkie działania przedstawione na forum przyniosły jedynie zmiane wyglądu krzaczków...
Proszę o pomoc

Kod
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>Znaki</title>
</head>


<body>
<?php
require_once('funkcje_bd.php');
$db = lacz_bd();
$db->query('SET NAMES utf8');
$db -> query ('SET CHARACTER_SET utf8_unicode_ci');
$zapytanie="select nazwisko,imie,druzyna,sum(bramki) as suma from strzelcy2 group by nazwisko,imie,druzyna order by sum(bramki) DESC";
$wynik0=$db->query($zapytanie);
$ile=$wynik0->num_rows;

echo "<table>";

echo "<tr>";
echo "<td> Nazwisko</td>";
echo "<td> Imie </td>";
echo "<td> Druzyna </td>";
echo "<td> Bramki </td>";
for ($i=0;$i<$ile;$i++)
{
$wiersz0=$wynik0->fetch_assoc();
echo "<tr>";
echo "<td> $wiersz0[nazwisko]</td>";
echo "<td> $wiersz0[imie]</td>";
echo "<td> $wiersz0[druzyna]</td>";
echo "<td> $wiersz0[suma]</td>";
echo "<tr>"; }
echo "</tbody>";
echo "</table>"; ?>

</body></html>

Napisany przez: El Nino9 4.02.2012, 13:02:41

witam natrafiłem dziś na dziwny problem
otóż szczytuje sobie dane z pewnej strony i dodaje rekordy do bazy danych (ogólnie ponad 300k wierszy, spory plik)
używam funkcji gzfile, później urldecode następnie jadę pętlą foreach
miałem problem z kodowaniem ale rozwiązałem go mysql_query("SET NAMES utf8");
a więc do sedna - rekordy zapisały się do bazy w miare ok - ale tylko w miare bo czesc z nich się wykrzaczyło, co najlepsze to takie same wyrazy albo się krzaczyły albo nie
przykład
w pliku miałem
241719,wioska+barbarzy%C5%84ska,709,947,6384830,11970,0
241726,wioska+barbarzy%C5%84ska,827,139,3163882,11106,0

w bazie zapisało się:

241719 wioska barbarzyńska 709 947 6384830 11970 0
241726 wioska barbarzyńska 827 139 3163882 11106 0

z czego to może wynikać?
pozdro

Napisany przez: virVP 21.03.2012, 11:19:22

Witam
Mam problem z PL znaczkami z bazy MySQL- kodowanie UTF8.
Zrobiłem kopię zapasową. Przeniosłem bazę na nowy komputer (XP 32bit, WAMPSERWER) i tu się pojawił problem - nie mam PL znaczków na www. Wczytując kopię tej samej bazy na innym komputerze (7 64bit, WAMPSERWER) - nie ma problemów, wszystko działa.
- teksty zapisane w kodzie PHP wyświetlają się poprawnie
- w <head> mam zapis że to UTF8
- wyświetlając zawartość bazy np. w MySQL Workbench - mam PL znaczki
- dodając wpis do bazdy z poziomu www - wyświetlą się ok na www, ale w bazie (np. w MySQL Workbench) już nie ma PL znaczków

Zauważyłem, ze w my.ini nie mam zapisu: default-character-set=utf8.
Wpisując go - MySLQ nie chce się uruchomić. Ale nie wiem co z tym dalej zrobić. Może ktoś coś podpiwiedzieć?

ROZWIĄZANIE
Dodałem do my.ini:
character-set-serwer=utf8
character-set-filesystem=utf8

i wszystko działa:)

Napisany przez: michu_06 29.03.2012, 07:48:04

ja robię trochę inny myk jak mam przenieść bazę danych, do tej pory zawsze to działało
plik z utowrzoną kopią nazwijmy kopia.sql
a z shell robię coś takiego :

Kod
echo "SET NAMES UTF8;" > kopia_pl.sql
cat kopia.sql >> kopia_pl.sql


w ten sposób, przy imporcie bazy zawsze mam polskie znaczki, jak do tej pory zawsze to zdawało egzamin.

Napisany przez: Filia 3.05.2012, 23:29:06

Witam

Przewertowałem mnóstwo for i postów, próbowałem różnych rozwiązań i nie mogę sobie poradzić z takim problemem.

Mam panel napisany w php z wykorzystaniem mysql na zdalnym serwerze i wszystko działa cacy.

Chciałem uwolinić panel od internetu i zainstalowałem sobie po kolei xampa wampa vertrigo a nawet krasnala.
Odpaliłem panel na swoim kompie, wyeksportowałem bazę ze zdalnego serwera i zaiportowałem w phpmyadmin u siebie.

Sam panel chodzi dobrze, ale oczywiście rozwaliło polskie znaki.
Najciekawsze jest to jak przestawie w pliku na kompie localhost na adres zdalnego serwa na którym baza chodzi na codzien to polskie znaki są.

Oczywiście porównania i kodowania znaków ustawiłem w swojej bazie identycznie jak w zdalnej. Jedyne czego nie umiem przestawić to zmienne które się różnią:

U siebie mam tak:

character set client utf8
(Wartość globalna) latin1
character set connection utf8
(Wartość globalna) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Wartość globalna) latin1
character set server latin1
character set system utf8
character sets dir c:\wamp\bin\mysql\mysql5.5.20\share\charsets\
collation connection utf8_general_ci
(Wartość globalna) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci

A na zdalnym serwerze tak:

character set client utf8
(Wartość globalna) latin2
character set connection utf8
(Wartość globalna) latin2
character set database latin2
character set filesystem binary
character set results utf8
(Wartość globalna) latin2
character set server latin2
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
(Wartość globalna) latin2_general_ci
collation database latin2_general_ci
collation server latin2_general_ci


Myscharacter set client utf8
(Wartość globalna) latin2
character set connection utf8
(Wartość globalna) latin2
character set database latin2
character set filesystem binary
character set results utf8
(Wartość globalna) latin2
character set server latin2
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
(Wartość globalna) latin2_general_ci
collation database latin2_general_ci
collation server latin2_general_ci

W jaki sposób można zmienić te wartości np w xampie żeby oba serwery były identyczne?
Męcze się z tym od rana i nie moge znaleść sposobu, przegrzabałem pół dokumentacji mysql' ale nic i tak nie działa sad.gif
help!

Napisany przez: obiektowy12 18.12.2012, 10:21:10

Sprawdź jakie kodowanie masz w pliku, np notepad ++ ma domyślne kodowanie, kurcze nie pamiętam teraz jakie, ale musisz zmienić na utf_polish, najlepiej korzystaj z darmowego programu Eclipse dam jest domyślnie ustawione na obsługę polskich znaków

Napisany przez: bulwaa7 28.03.2013, 19:03:45

Witam kolegów. Ja dopiero raczkuję w PHP toteż moje pytanie może być banalne.

Znacznik meta:

  1. <http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=UTF-8">

Sortowanie połączenie z serwerem utf8_general_ci
Metoda porównywania napisów utf8_general_ci

Po wywołaniu
  1. while ($row = mysqli_fetch_array($result)) {
  2. $jokes[]= $row['tekstkawalu'];
  3. }


Gdzie tu problem?

Wyskakują mi "krzaczki" w miejsce polskich znaczków
Próbowałem już nawet zmienić sortowanie połączenia z serwerem i metodę porównywania napisów na utf8_polish_ci ale bezskutecznie.

Przy wywołaniu echo "ążźńćół"; wyskakują polskie znaczki a poprzez pobieranie z bazy danych nie. W phpmyadmin polskie znaki są prawidłowo wyświetlane.

Jak zaradzić temu problemowi?

Napisany przez: Evinek 28.03.2013, 19:21:26

Spróbuj to:
http://php.net/manual/pl/mysqli.set-charset.php
$mysqli->set_charset("utf8");

Napisany przez: bulwaa7 28.03.2013, 19:28:54

Działa, dzięki:)

Napisany przez: Kiui 16.06.2013, 13:59:12

Hej.

Fajny temat bardzo przydatny może dożuce swoje 3 groszę i sie komuś przyda.

U mnei ta funkcja fajnie smiga dlatego polecam smile.gif

  1. public function db($zapotp)
  2. {
  3. $db = new mysqli('localhost','root','','db');
  4. $langadb = "SET NAMES utf8";
  5. mysqli_query($db, $langadb);
  6. return mysqli_query($db, @$zapotp);
  7. mysqli_close($db);
  8. }
  9. $zap = "select * from nazwa where id='3'";
  10. $odp = $db($zap);

Napisany przez: izi 11.08.2013, 11:22:12

Witam!

Od kilku dni próbuję poradzić sobie z polskimi znakmi, niestety ciągle nic nie wychodzi... Może ktoś mi tutaj pomoże, będę bardzo wdzięczny...

Tak wygląda początek kodu:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" xml:lang="pl">
  3. <head>
  4. <!-- Start Included Script -->
  5. <title><?php http://www.php.net/echo"$config[sitename]" ?></title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf8" />


Próbowałem dawać UTF-8, rózne kombinacje, ale nic nie wychodzi...

Napisany przez: klimczakjakub1 12.11.2013, 21:08:50

A ja zaśmiecałem Zapytaj takimi pytaniami... facepalmxd.gif

Napisany przez: mareklandowski 4.01.2014, 00:30:47

Te problemy są typowe przy przenoszeniu baz danych. Odkąd korzystam z framework'a (YII) dewelopuje wyłącznie na docelowym serwerze - łacze się poprzez Sublime, baza danych jest na serwerze i problemu przenoszenia baz danych nie mam. Natomiast rzeczywiście, zawsze set names utf8 |Latin2 itp. zawsze pomagało. Dawałem to zawsze tuż po connect.


Napisany przez: KrzysztofKuznik 8.02.2014, 11:58:15

Dzieki smile.gif to sie przydalo zwlaszcza ze uzywam windows-a ang. a nie polskiego.

Napisany przez: wyz 11.05.2014, 20:31:15

Witam! Jestem początkujący. Wiem, że ten temat przewijał się wiele razy, ale nigdzie nie znalazłem rozwiązania, skutecznego sposobu który by zadziałał. Otóż nie wiem co zrobić żeby na localhost czytało polskie znaki. Korzystam z Xampp, Notepad++ i Ked.
Próbowałem wkleić w my.ini

  1. character-set-server = latin2
  2. collation-server = latin2_general_ci
  3. init-connect = 'SET NAMES latin2'


ale nie pomogło
Wkleiłem to pod:
  1. read_buffer_size = 256K
  2. read_rnd_buffer_size = 512K
  3. myisam_sort_buffer_size = 8M
  4. log_error = "mysql_error.log"


Jeżeli znacie sposób to proszę pomóżcie.

Napisany przez: trzczy 23.10.2017, 00:04:51

@wyz
To get UTF-8 charset you can specify that in the DSN.

  1. $link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");

  1. $db = new pdo('mysql:host=127.0.0.1;port=3306;dbname=mysql;charset=utf8','user','password',http://www.php.net/array(
  2. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  3. ));

http://php.net/manual/en/pdo.construct.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)