Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Problem z kodowaniem po reinstalacji serwera
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Przeinstalowałem serwer i się zaczęło. Mam kilka problemów, z którymi nie mogę sobie poradzić, więc proszę o radę.
mam tak:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

połączenie z bazą:
  1. mysql_connect($db_host, $db_user, $db_pass)
  2. or die('Wystapił błąd połączenia z serwerem MySQL');
  3.  
  4. mysql_select_db($db_name)
  5. or die('Wystąpił błąd połączenia z bazą danych');
  6.  
  7. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");

baza: utf8_general_ci
tabela: utf8_polish_ci
pole: tresc longtext utf8_polish_ci
I puszcza mi tylko jak myślę, 256 znaków. Pewnie coś w konfiguracji MySQL?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




nie: mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
a: mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
Odróżniaj tekst od nazw kolumn/tabel

Cytat
I puszcza mi tylko jak myślę, 256 znaków
Czyli co mianowicie? Opisz problem dokładniej, pokaz kod. Ksyhoo raportowałeś wcale nie gorsze tematy od tych, co ostatnio sam zadajesz.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Już sobie poradziłem z tą ilością a ciapki miałem dobrze - nie wiem, czemu tak mi skopiowało.
Ale problem mam teraz nieco inny. Mianowicie, pobieram:
  1. $res = mysql_fetch_row(mysql_query('SELECT id, word FROM '.$dtable.' WHERE id='.$posizione_parola));

i mam:
Cytat
string(4) "ĆMA"

a to przecież 3 znaki.
Jak dam:
  1. $parola[1] = utf8_decode($parola[1]);

to daje:
Cytat
string(3) "?MA"

A w bazie mam ĆMA...

Ten post edytował Kshyhoo 20.02.2012, 13:14:19
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




Nie, ĆMA to w utf-8 4 znaki. Ć to dwa znaki.

wróć, nie znaki a bajty. (IMG:style_emoticons/default/smile.gif)

utf8_decode - po co to używasz, skoro dane masz poprawne? przecież to bez sensu
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




To jak mam to pobrać, żebym miał 3 znaki?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




Ale o co ci chodzi? Co ty chcesz z tym zrobić?

Polskie krzaki w utf-8 zajmują dwa bajty - proste. W czym ci to przeszkadza? O co ci chodzi?

Jak chcesz pobrać liczbę znaków uwzględniając polskie krzaki, to masz użyć:
http://www.php.net/manual/en/function.mb-strlen.php
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Chcę zrobić tak:
1. pobieram słowo (ĆMA).
2. zamieniam słowo na podkreślniki (___).
3. dodaje między nimi spacje (_ _ _)
4. wyświetlam...
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




No to biblioteka MB. Link dostałeś w poprzednim poście
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #9





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Czyli:
  1. $parola[1] = utf8_decode($parola[1]);

zwraca:
Cytat
string(3) "?MA"

a:
  1. $parola[1] = mb_strlen($parola[1]);

zwraca:
Cytat
int(3)
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




Przecież mb_strlen() zwraca liczbę, która określa liczbę znaków.....
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #11





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No tak, a ja potrzebuję stringa, szukam dalej.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




Ksyhoo obudź się człowieku wkońcu.....
Chcesz dla słowa 3 znakowego zrobić ___ no to mając liczbę znaków bez problemu możesz wygenerować ___ O pętli FOR nie słyszał?

A jak chcesz mieć słowo ĆMA, ktore składa się dokładnie z 3 bajtów, to zmień kodowanie z UTF-8 na ISO-8859-2.
Metoda ICONV()
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #13





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




To robię, na dodatek podmieniam na grafiki. Wszystko mi działa, dopóki nie pojawi się polski znak.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




To pokaż kod. Tylko proszę, niech ten kod zawiera już mb_strlen lub iconv, skoro piszesz, że tak właśnie robisz jak ci napisałem
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #15





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pobieram słowo z bazy danych:
  1. function ScegliParola ($user, $pword, $dhost, $dbase, $dtable)
  2. {
  3. $res = mysql_fetch_row(mysql_query('SELECT max(id) FROM '.$dtable));
  4. $numero_parole = $res;
  5. $posizione_parola = rand (2, $numero_parole[0]);
  6. $res = mysql_fetch_row(mysql_query('SELECT id, word FROM '.$dtable.' WHERE id='.$posizione_parola));
  7. $parola = $res;
  8. //$parola[1] = utf8_decode($parola[1]); // string(3) "?MA"
  9. //$parola[1] = mb_strlen($parola[1], 'utf8'); // int(3)
  10. return ($parola);
  11. }

Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




No i gdzie tu zamieniasz słowo na ___ ? No napisałeś że z tym masz problem, gdy masz polski znak. I napisałeś, ze pomimo używania mb_strlen lub iconv nadal masz problem. No i ja się pytam o ten właśnie kod.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #17





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cały skrypt mi działa, jedynie funkcje php nie przetwarzają poprawnie polskich znaków - to problem. Już funkcja:
  1. var_dump(ScegliParola ($user, $pword, $dhost, $dbase, $dtable));

zwraca dla słowa ŻÓŁĆ:
Cytat
array(2) { [0]=> string(2) "100" [1]=> string(8) "????" } Array


Ten post edytował Kshyhoo 20.02.2012, 15:06:47
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




Dobra. Ja już nie mam sił....

ps: nie sądziłem, że kiedykolwiek napiszę tak do Ciebie (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #19





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Tak wyświetlam wybrane litery
  1. //$scelt = mb_split('//', $scelte, -1);
  2. $scelt = preg_split('//', $scelte, -1, PREG_SPLIT_NO_EMPTY);
  3. print_r($scelt);
  4. echo ("\n<p>\n");
  5. foreach ($alfabeto as $lettalf) {
  6. $contrl = false;
  7. foreach ($scelt as $lett) {
  8. if (!strcasecmp($lettalf, $lett)) {
  9. $contrl = true;
  10. }
  11. }
  12. if ($contrl) {
  13. print (' <img src="images/lr_'.$lettalf.'.png" style="border: 0; width: 20px; height: 20px" alt="'.$lettalf.'" />');
  14. } else {
  15. print (' <a href="'.$_SERVER['PHP_SELF'].'?letter='.$lettalf.'"><img src="images/lb_'.$lettalf.'.png" style="border: 0; width: 20px; height: 20px" alt="'.$lettalf.'" /></a>');
  16. }
  17. /* if ($lettalf=='i') echo ("\n <br />");
  18. echo ("\n");
  19. if ($lettalf=='r') echo ("\n <br />");
  20. echo ("\n"); */
  21. }
  22. echo ("</p>\n"); echo $scelte;

tak alfabet:
  1. print ('<p><img src="images/hang_'.($tentativi+1).'.png" style="border:0;width:150px;height:200px" alt="Miss '.$tentativi.'/6" /></p>');
  2. echo ("\n<p>\n");
  3. $caratteri = preg_split('//', $indovinata, -1, PREG_SPLIT_NO_EMPTY);
  4. foreach ($caratteri as $lettalf) {
  5. $lettalf = strtr($lettalf, $alfabeto);
  6. if ($lettalf==' ') {
  7. print (' <img src="images/lb_~.png" style="border: 0; width: 20px; height: 20px" alt="" />');
  8. } else {
  9. print (' <img src="images/lb_'.$lettalf.'.png" style="border: 0; width: 20px; height: 20px" alt="'.$lettalf.'" />');
  10. }
  11. echo ("\n");
  12. print (' <img src="images/lb_~.png" style="border: 0; width: 20px; height: 20px" alt="" />');
  13. echo ("\n");
  14. }
  15. print ('</p>');


Ten post edytował Kshyhoo 20.02.2012, 15:48:20
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: 29.06.2026 - 04:11