Strona 1 z 1

[MySQL] - znaki...

PostNapisane: 2008-07-02, 13:20:41
przez Júzek
Wiem, wiem... Na pierwszy rzut oka to najczęściej powtarzalny temat na forach... tylko, że w tym przypadku jestem "po" zastosowaniu się do najczęstszych rad a mimo to problem nie znika.

Pliki *.php - UTF-8
Baza \ tabele: utf8_polish_ci
<meta .... : "text/html; charset=utf-8" ... meta>
Wynik: �???????? dla wartośći: "óęąśłżźćń"

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 13:25:35
przez BlueMan
Júzek napisał(a):utf8_polish_ci
zmień na general_ci, albo _bin
nie używa się nigdzie _polish_ci

Júzek napisał(a):Wynik: �???????? dla wartośći: "óęąśłżźćń"
wynik widzialny przez phpmyadmin, czy na stronie?

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 14:34:20
przez Júzek
Zmieniłem na "utf8_general_ci", phpMyAdmin wyświetla je normalnie, oryginalne skrypty WP również. Niestety zwykłe wypisanie wyświetla "krzaki" :/

Nie widać różnicy czy string został dodany przez panel WP czy w PMA.

Poszperam w funkcjach wp może dołączyli coś do obsługi znaków.

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 18:10:19
przez Júzek
Mały UPDATE:

By wykluczyć winę ze strony skryptów WP utworzyłem nową bazę, nową tabele, pola wypełniłem "óąśżźćńł". Po wypisaniu ten sam efekt. Wszystko kodowane UTF8_Unicode_ci (próbowałem również z UTF8_general_ci), pliki UTF8... mety tak samo... no i "???????"...

Przyznam, że to mnie przerasta :/

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 19:04:48
przez junior
a co masz w ustawieniach mysql składowania oraz klienta jakie kodowanie?

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 21:35:26
przez BlueMan
1. W jaki sposób zapisujesz dane do bazy danych?
2. Po tym zapisie jakie znaki widzisz w bazie danych? (jakieś specyficzne krzaki, znaki zapytania, czy PL czcionkę?)
3. Na stronach wszędzie masz UTF??

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 21:49:51
przez Júzek
a co masz w (...) jakie kodowanie?

(Główne ustawienia)
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_unicode_ci

(Podczas tworzenia bazy)
Metoda porównywania napisów dla tabeli: utf8_unicode_ci
Metoda porównywania napisów dla tabeli i pola: utf8_unicode_ci

1. W jaki sposób zapisujesz dane do bazy danych?

Wpisywane przez: PMA, PA WP
Efekt: Strony WP wyświetlają prawidłowo, oddzielne skrypty nie.

2. Po tym zapisie jakie znaki widzisz w bazie danych?

PMA i WP zawsze wyświetla prawidłowo.

3. Na stronach wszędzie masz UTF??

Tak, zarówno kodowanie plików *.php jak i informacje <meta...> w części z html.

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 22:09:04
przez BlueMan
Kod: Zaznacz cały
SET NAMES latin2;
SET NAMES latin1
SET NAMES utf8;

jedno z tych zapytań spróbuj tuż po połączeniu się z bazą danych.

czyli jak masz:
Kod: Zaznacz cały
mysql_connect();
mysql_query("SET NAMES latin2");

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 22:29:43
przez Júzek
SET NAMES utf8;

Zadziałało, dzięki wielkie :)

Pomógł +1 :]

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 22:33:59
przez BlueMan
Spoko - ze znakami w bazie danych zawsze były problemy :(

Re: [MySQL] - znaki...

PostNapisane: 2008-07-02, 22:37:33
przez Júzek
Ktoś z ekipy wzbogacającej język PHP lub ekipy od MySQL mógłby napisać jakiś "bajer" który wykrywa takie sytuacje i sam w sobie z automatu ten problem rozwiązuje :] Szkoda, że to nie jest takie łatwe jak mi się wydaje :/

No nic... :]

Re: [MySQL] - znaki...

PostNapisane: 2008-07-14, 15:49:48
przez Júzek
Witam.
Znowu problem ze znakami. Tym razem nie dotyczącymi bazy a samego skryptu, mianowicie:

Kod: Zaznacz cały
function urlArgs($surl, $url)
{
    $url = substr($url, strlen($surl));
    $b = 0;
    for($a = 0;$a < strlen($url);$a++) {
        if ($url[$a] == "/") {
            $b = $b + 1;
            $url[$a] = "";
        }
        $urlArgs[$b] .= $url[$a];
    }

    return $urlArgs;
}


Zwraca "krzaczek" zamiast braku znaku w miejscu /. Natomiast w tym przypadku każdy znak to "krzaczek".
Kod: Zaznacz cały
function urlArgs($surl, $url)
{
    $url = substr($url, strlen($surl));
    $b = 0;
    for($a = 0;$a < strlen($url);$a++) {
        if ($url[$a] == "/") {
            $b = $b + 1;
        }
        $url[$a] = substr($url[$a], 1);
        $urlArgs[$b] .= $url[$a];
    }

    return $urlArgs;
}


Na apache 1.x nie miałem takich problemów dopiero po aktualizacji do 2.x.

Wydawało mi się ze te funkcje (już nie wspominając o zwykłym przypisaniu) zwracają znaki w stronie kodowej, w której zostały poprzednio przekazane.

Re: [MySQL] - znaki...

PostNapisane: 2008-11-19, 19:07:13
przez Júzek
Witam.
Problem też dotyczy znaków dlatego nie tworze nowego tematu.

.html: utf-8, meta: utf-8; .php: utf-8; echo $_POST['post'] -> krzaki ...

utf8_encode / utf8_decode w róznych kombinacjach nie pomaga.

Re: [MySQL] - znaki...

PostNapisane: 2008-11-19, 19:19:38
przez BlueMan
Chyba, że sprawa ustawień serwera... ale ogólnie dziwne to :|

Re: [MySQL] - znaki...

PostNapisane: 2008-11-19, 19:36:49
przez junior
jeśli masz niepoprawnie ustawione kodowanie w pliku wyświetlającym lub wysyłającym to apache może wysłać dokument ze swoim domyślnym kodowaniem.
w ostateczności na początku pliku :
Kod: Zaznacz cały
header("Content-Type: text/html; charset=UTF-8");

Re: [MySQL] - znaki...

PostNapisane: 2008-11-19, 19:38:25
przez BlueMan
Oczywiście to co napisał junior w PHP ma być.

Re: [MySQL] - znaki...

PostNapisane: 2008-11-19, 19:43:48
przez Júzek
... jest i niestety nie rzutuje na wyświetleniu $_POST'(u\a). Dobrałem się do funkcji zwracającej kodowanie stringu; o efektach poinformuje :]


EDIT:
Można uznać, że problem rozwiązany. Przywróciłem plik z backup'a i z czystej ciekawości sprawdziłem, która funkcja mogłaby takie krzaki wyhodować. Okazuje się ze htmlentities() jest za to odpowiedzialna.


Ehhhh... no nic...

Pozdrawiam :]