Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Dziwna sprawa z kodowaniem
pistolet
post 21.01.2009, 17:22:22
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Otóż mam mały cms zmieniłem wszystko tak żeby było latin2/ISO-8859-2 w bazie/php i w niektórych miejscach mam polskie znaki a w niektórych nie.

Przykładowo podczas edycji artykułu:

W polu tytułu są polskie znaki prawidłowo (w bazie jak i na stronie są ok w 100%).

W polu tekstu podczas pisania polskich znaków pierwszy raz znaki są na stronie i w bazie prawidłowo, problem pojawia się gdy chce edytować ten tekst wtedy zamiast polskich znaków pojawiają się ±¶Ľˇ¦¬ (tylko ó normalnie jest) i gdy kliknę "zapisz" owe znaki również zapisują się na stale w bazie zamiast pl znaków.


Ma ktoś propozycje czego to może być wina, bo wygląda tak jakby "edytor" miał problemy z pobieraniem pl znaków z bazy?

Bardzo proszę o pomoc. dostal.gif

Ten post edytował pistolet 21.01.2009, 17:31:17
Go to the top of the page
+Quote Post
potreb
post 21.01.2009, 17:44:58
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Daj to po połączeniu z bazą

  1. <?php
  2. mysql_query("SET NAMES 'latin2'");
  3. ?>


Ten post edytował potreb 21.01.2009, 17:45:33


--------------------

Go to the top of the page
+Quote Post
pistolet
post 21.01.2009, 17:49:15
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Dodane winksmiley.jpg nic nie daje konkretnie to mam:

Kod
mysql_query('SET CHARACTER SET latin2');
mysql_query('SET collation_connection = latin2_general_ci');
Go to the top of the page
+Quote Post
potreb
post 21.01.2009, 17:56:40
Post #4





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Może dla edycji nie masz ustawionego kodowania, a dla dodawania tekstu już masz. Używasz jednego połączenia z baząquestionmark.gif


--------------------

Go to the top of the page
+Quote Post
pistolet
post 21.01.2009, 20:56:16
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Tak jedno połączenie z baza. wacko.gif
Go to the top of the page
+Quote Post
potreb
post 21.01.2009, 21:06:25
Post #6





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Na górze ma przyklejony temat:

[MYSQL] Polskie znaki

  1. <?php
  2. mysql_connect($DBhost,$DBuser,$DBpass);
  3. mysql_query("SET NAMES latin2");
  4. mysql_select_db($DBname);
  5. ?>


Masz tak jak w tym przykładzie ustanowione połączenie?
Sprawdź jeszcze czy kolumna dla tekstu posiada dobre kodowanie i porównywanie napisów.

Ten post edytował potreb 21.01.2009, 21:07:47


--------------------

Go to the top of the page
+Quote Post
Pilsener
post 21.01.2009, 21:07:26
Post #7





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Ja zawsze w takich przypadkach zalecam sprawdzić, w jakim standardzie trzymane są krzaki w bazie. To że baza jest latin2 nie oznacza, że ja sobie tak nie mogę dodać krzaków zakodowanych w windows, pobierz coś z bazy i użyj jakiejś funkcji z rodzaju:

http://pl.php.net/manual/pl/function.mb-detect-encoding.php

Do sprawdzenia, co masz de facto w bazie. Powinny być takie krzaki, jakie masz ustawione w połączeniu, bazie i na stronie, jeśli tak nie jest, to albo sknociłeś kodowanie na stronie, albo w bazie, albo przy połączeniu. Pamiętaj też o tym, że możesz ustawiać kodowanie indywidualnie dla tabeli a nawet pola tabeli - przyjrzyj się temu także.
Go to the top of the page
+Quote Post
pistolet
post 23.01.2009, 16:22:13
Post #8





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


W bazie za pierwszym razem mam normalnie polskie litery "ęóąśłżźćń" na stronie też ok, ale gdy chce edytować tekst w polu edycji są krzaki zamiast pl literek. Gdy zedytuje ten tekst i kliknę ok, krzaki zamiast pl znaków wkradają się do mysql'a już na stałe. Musiałbym co edycja zmieniać ręcznie pl znaki żeby było ok. Wygląda typowo jakby nie pobierał w latin2/iso2 edytor...ale kodowania do niego nie ma osobno. Jest to o tyle dziwne ze pole tytuł mam dobrze i przed i po edycji.

Może to wina ustawienia pola w tabeli...już tracę cierpliwość do tego php. Proszę o pomoc.
Go to the top of the page
+Quote Post
bim2
post 23.01.2009, 16:24:18
Post #9





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


header" title="Zobacz w manualu PHP" target="_manual
Wyślij headera z kodowaniem smile.gif iso-8859-2


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 24.01.2009, 02:11:01
Post #10





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
ale gdy chce edytować tekst w polu edycji
- to nie możesz tak po prostu zrzucić tego z bazy do formularza a z formularza do bazy.

Musisz:
1. Połączyć się z bazą i ustawić odpowiednie kodowanie przy połączeniu
2. Wygenerować stronę z formularzem, do którego wczytujesz krzaki z bazy - strona ma mieć kodowanie takie, jakie masz w bazie - bo skąd inaczej przeglądarka ma wiedzieć, jakie w formularzu sadzisz krzaki?
3. Musisz wysłać zmienione formularzem dane na serwer - strona z formularzem znów musi mieć odpowiednie kodowanie, bo skąd niby serwer ma wiedzieć, jakie sadzisz krzaki?
4. Gdy krzaki odbierasz w PHP znów znaczenie ma kodowanie połączenia z bazą - krzaki odebrane ze strony muszą mieć odpowiednie kodowanie, musisz to w tym samym kodowaniu do bazy dodać i jeszcze sama baza też musi mieć takie kodowanie.

Nie wiem w jaki sposób robisz te machinacje - może ściągasz z bazy przez cziwrajtera a próbujesz dodać spambotem. Bez kodu ani nawet linku do strony trudno cokolwiek powiedzieć.
Go to the top of the page
+Quote Post
pistolet
post 26.01.2009, 18:46:49
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Kod
http://leap.gowondesigns.com/


Tutaj link do tego CMS'a, przepraszam że nie dałem go odrazu ale myślałem że z Waszymi wskazówkami dam rade sam to zrobić ale niestety nic nie pomaga. Standardowo CMS kodowany jest w UTF8 ale na nim również ten sam problem tylko inne "krzaki" są zamiast polskich znaków. Jeżeli ktoś byłby tak dobry i mógł powiedzieć jak go poprawić żeby w edytorze były normalnie polskie znaki byłbym bardzo zobowiązany.

Pozdrawiam i proszę o szybką odp.
Go to the top of the page
+Quote Post
Pilsener
post 26.01.2009, 22:20:07
Post #12





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


A na stronie, na której edytujesz krzaki masz poprawnie ustawione kodowanie:
  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
- ? Masz mieć taki charset jak w bazie i przy połączeniu. Wygląda mi to na niedopatrzenie autorów tego systemu (pewnie nie słyszeli nigdy o czymś takim, jak polskie znaki) - ciężko teraz tam dochodzić, co jest skopane, prawdopodobnie kod łączący się z bazą albo edytor, którego tam stosują wymaga jakiś dodatkowych ustawień. Trzeba by rozgryźć system, posiedzieć parę godzin, zrobić testy... Poszukaj kogoś, kto tego u nas używa lub zajrzyj na forum projektu (jeśli mają takowe). Takie niedociągnięcia są paskudne - kilka godzin szukania i sprawdzania, 5 minut poprawiania kodu, potem klient się dziwi, że modyfikacja czegoś wychodzi drożej niż napisanie nowego od podstaw...

Obejrzałem nawet na szybkiego kod, spróbuj dodać bezpośrednio po łączeniu się z bazą:
  1. <?php
  2. mysql_query("SET NAMES latin2");
  3. ?>
- oczywiście zamiast latin2 daj swoje kodowanie. Jak nie pomoże, to użyj funkcji, do których link podałem wyżej, by sprawdzić, w jakim kodowaniu krzaki wychodzą ze strony.
Go to the top of the page
+Quote Post
pistolet
post 29.01.2009, 18:15:09
Post #13





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Dodawałem i nic...wina na pewno jest edytora(pobieranie rekordów z bazy przez edytor) tylko hmm czy są szanse go poprawić?

Najgorsze jest to że support na oficjalnej stronie jest praktycznie zerowy i raczej tam nie uzyskam odp. na ten problem...a szkoda bo CMS jest naprawdę świetny! Jeżeli ktoś będzie miał pomysł jak to naprawić będę bardziej niż zobowiązany! Pozdrawiam.


Edit:

  1. <?php
  2.  
  3. $string_wyjsciowy = strtr($string_wejsciowy, 'ąśźĄŚŹ', 'ąśĽˇŚŹ');
  4.  
  5. ?>


Myślę czy dało by się coś takiego dać?

Ten post edytował pistolet 29.01.2009, 18:19:12
Go to the top of the page
+Quote Post
piotrekk
post 29.01.2009, 18:20:14
Post #14





Grupa: Zarejestrowani
Postów: 123
Pomógł: 2
Dołączył: 13.11.2006

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


wszedzie musisz ustawic na utf-8 zarowno w plikach jak i bazie danych.
W bazie danych czasem trzeba ustawic te kodowanie utf-8 recznie dla kazdej tabeli i wiersza. Juz kilka razy sie z tym spotkalem.,

a jak pobierasz dane z bazy danych to tez poprzedz to set names utf-8
pozdro

Ten post edytował piotrekk 29.01.2009, 18:22:09
Go to the top of the page
+Quote Post
pistolet
post 29.01.2009, 18:36:24
Post #15





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Aż postanowiłem zrobić screeny tego bo niektórzy dalej nie rozumieją chyba o co mi chodzi...

Kodowanie wszędzie ustawione na UTF-8, a w bazie utf8_polish_ci

Po napisaniu tekstu na stronie głównej(wszystko OK):



Gdy chce z edytować wyżej wymieniony tekst:



I jak w tabela w bazie:



Pragnę zauważyć że tytuł jest cały czas wyświetlany dobrze tylko z polem tekst jest problem. Przy zmianie na kodowania na latin2 jest to samo tylko inne krzaki się pokazują.

Ten post edytował pistolet 29.01.2009, 18:37:26
Go to the top of the page
+Quote Post
isso
post 29.01.2009, 19:02:56
Post #16





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


A czy to jest normalny, zwykły textarea ? bo widze, że w input text jest ok, czy mógłbyś dać tą część kodu z textarea?


--------------------
Go to the top of the page
+Quote Post
pistolet
post 29.01.2009, 22:34:09
Post #17





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Nie wiem czy o to chodziło:

  1. <?php
  2. //The user is editing an article
  3. if ($this->qAction[2]=="edit") { $body=convertForDb(array('type' => 'screen', 'text' => $body)); $title=convertForDb(array('type' => 'screen', 'text' => $title)); } else { $auth=$_SESSION['userId']; }
  4. if($published=='') $published=val('autopub-articles'); if($comments==1||$comments==''&&val('allow-comment')==1) $com=' checked="checked"';
  5. $q=mysql_query("SELECT * FROM ".db('prefix')."users WHERE id='$auth'"); $user=mysql_fetch_array($q); $name=$user['name'];
  6.  
  7.    echo '<form method="post" name="'.$this->panelTitle.'" action="?'.db('query').'" />';
  8.    echo formItem(array('type'=>'hidden','name'=>'origdate','value'=>$date)).formItem(array('type'=>'hidden','name'=>'origcom','value'=>$comments)).formItem(array('type'=>'hidden','name'=>'origpub','value'=>$published));
  9.    echo '<p>Title:<br />'.formItem(array('type'=>'text','name'=>'title','value'=>$title)).'</p>';
  10.    echo '<p>Author:<br /><select name="auth">';
  11.  
  12. $a1=mysql_query("SELECT * FROM ".db('prefix')."users");
  13. while ($a=mysql_fetch_array($a1)) {
  14. $current= ($this->qAction[2]=="edit") ? $a['id']:$_SESSION['userId'];
  15. $selected= ($auth==$current) ? ' selected="selected"':'';
  16. $authors.="\n<option value=\"$a[id]\"$selected>$a[name]</option>"; }
  17.  
  18.    echo $authors.'</select></p>';
  19.    echo '<p>Content: <br />
  20. <script type="text/javascript">edToolbar();</script><br />'.formItem(array('type'=>'textarea','name'=>'body','value'=>$body)).'<br /><br /></p>
  21. <script type="text/javascript">var edCanvas = document.getElementById('body');</script>';
  22.    echo '<p>Category:<br /><select name="cat">';
  23. ?>
Go to the top of the page
+Quote Post
isso
post 29.01.2009, 22:41:11
Post #18





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


Jak dla mnie to cały problem jest w tej funkcji:

  1. <?php
  2. formItem(array('type'=>'textarea','name'=>'body','value'=>$body))
  3. ?>


sprawdź w jakim pliku ona jest, zobacz jakie on ma kodowanie(tzn. zmień kodowanie całego pliku na UTF-8), ewentualnie możliwe, że gdzieś tam będzie jakaś zmienna odpowiadająca za kodowanie.

Ogólnie rzecz biorąc z MySQL nie ma na 100% problemu bo kawałek wyżej widać, że wyświetla się poprawnie... spróbuj jeszcze coś takiego:

zrób echo dla $body i zobacz co z tego dostajesz... jeżeli dostaniesz normalne znaki to znacyz, ze gdzieś ta funkcja forItem lub ewentualnie pobieranie elementu poprzez ID się wysypuje... pokombinuj, podaj wyniki, jak coś to pisz na pw smile.gif


--------------------
Go to the top of the page
+Quote Post
pistolet
post 30.01.2009, 00:23:39
Post #19





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.10.2004

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


Pomału do przodu jak to mówią, odkryłem pośrednio czego to wina...

Cytat
formItem(array('type'=>'textarea','name'=>'body','value'=>$body))

zmieniłem na:
Cytat
formItem(array('type'=>'text','name'=>'body','value'=>$body))


tylko pole tekstu jest "małe" tzn takie jak pole tytuł...ale już są normalnie PL znaki! Teraz pytanko jak przerobić textarea...jakieś pomysły ;>

EDIT:

Pod textarea jest htmlentities które nie odczytuje pl znaków, jak mogłem to przeoczyć...problem rozwiązany niby takie gówienko a przyprawiło mnie kilka dni w kodzie...Dziękuje Wszystkim za pomoc.

Ten post edytował pistolet 30.01.2009, 00:33:54
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 Wersja Lo-Fi Aktualny czas: 28.04.2024 - 15:33