Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> apache, brak cyrylicy w przeglądarce, problem dla mnie skąplikowany :)
techjaw
post 4.10.2020, 10:05:25
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Przede wszystkim pragnę wszystkich zgromadzonych powitać wszem i wobec.

bardzo proszę o pomoc bo straciłem już nadzieję na rozwiązanie.

Mam serwer apache, z php 7.3.
Mam prosty skrypt, który po ODBC pobiera dane a część posiada tekst cyrylicą.
Niestety uruchamiając skrypt w przeglądarce na kompie w sieci, wszystkie dane cyrylicą po ODBC wyświetlają się jako znaki zapytania.
Wyświetlając echo "napis cyrylicą" wszystko ładnie się wyświetla.

Podejrzewam apacha bo z kolei uruchamiając w bashu poprzez php skrypt.php wyświetla się wszystko prawidłowo i z odbc i z echo.
Gdzie się da ustawiłem UTF-8, w apachu, php dla cli i dla apacha, w nagówku pliku php. Próbowałem też bez ustawionego domyślnego kodowania w apachu i ustawione było tylko kodowanie w header pliku php. Wytłumaczcie mi proszę gdzie szukać przyczyny skoro teoretycznie to nie wina ODBC bo w bashu interpreter php wyświetla poprawnie ale też nie wina apacha bo tekst cyrylicą wywołany w pliku php też wyświetla się poprawnie. Będę wdzięczny za wszelką pomoc.
Go to the top of the page
+Quote Post
Tomplus
post 4.10.2020, 20:49:44
Post #2





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Skomplikowany problem to jest.

Czy w apache.conf użyłeś:

AddDefaultCharset Off
AddCharset UTF-8 .html

??



Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2020, 21:19:15
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Sprawdź w dev toolsach w zakładce Network jaki jest Content-Type odpowiedzi. Jeśli jest tam inne kodowanie niż UTF-8, to rzeczywiście jest wina konfiguracji Apache. A jesteś pewien w ogóle, że ta Twoja baza jest w UTF-8?
Go to the top of the page
+Quote Post
techjaw
post 4.10.2020, 22:40:40
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Cytat(Tomplus @ 4.10.2020, 21:49:44 ) *
Skomplikowany problem to jest.

Czy w apache.conf użyłeś:

AddDefaultCharset Off
AddCharset UTF-8 .html

questionmark.gif


Używałem i OFF i komentowałem i UTF-8
Nie bardzo rozumiem co miałby dać drugi wpis?


Cytat(SmokAnalog @ 4.10.2020, 22:19:15 ) *
Sprawdź w dev toolsach w zakładce Network jaki jest Content-Type odpowiedzi. Jeśli jest tam inne kodowanie niż UTF-8, to rzeczywiście jest wina konfiguracji Apache. A jesteś pewien w ogóle, że ta Twoja baza jest w UTF-8?


Content-Type text/html; charset=utf-8
baza raczej utf, wnioskuję po tym że w bashu z lini poleceń wszystko wyświetla prawidłowo.

w sumie tutaj efekt http://software.hanipol.com/admin/j.php

ręce mi opadają walczę z tym od wczoraj. Myślę czy nie odpalić ngix.
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2020, 22:47:27
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Na 100% Apache nie ma nic do tego. Masz prawidłowo ustawiony UTF-8, zresztą domyślnie jest ustawiony.

Miałem kiedyś podobne babolki z polskimi znakami w bazie. Spróbuj dać to zaraz po połączeniu się z bazą:

  1. odbc_exec($conn, "SET NAMES 'UTF8'");


Jeśli to nie pomogło, to raczej baza ma inne kodowanie. Musiałbyć się dowiedzieć jakie i albo przetłumaczyć to w bazie na utf8, albo skonwertować dane w locie dla swojego skryptu.
Go to the top of the page
+Quote Post
techjaw
post 4.10.2020, 22:55:57
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Ale dlaczego w takim razie z poziomu basha wszystko działa prawidłowo ? Wnioskuję, że coś nie halo na drodze php->apache.
Oczywiście to co podałeś próbowałem i dupa:
Kod
header('Content-type: text/html; charset=utf-8');
echo "from echo : AAAКоллекция, вдохновленная картинами Климта<br><pre>";
$dbh= new PDO('odbc:hanipol', '', '');
$dbh->exec('SET NAMES utf8');
$dbh->exec('SET CHARACTER SET utf8');
$query = "call tlumacz@techjawt()";
$stmt = $dbh->prepare("$query");
$stmt->execute();
while ($row = $stmt->fetch()) {
    if ($row['JEZYK'] == 'RU'){
     echo "from odbc: ".$row['TLUM'].'<br>';
     break;
    }
    
}
unset($dbh); unset($stmt);


Macie jakąś sprawdzoną metodę w PHP aby sprawdzić kodowanie ciągu?
Co ciekawe niemieckie, polskie znaki wyświetlają się prawidłow, tylko ta nieszczęsna cyrylica.
Właściwie wyświetlenie mi nie potrzebne a tylko wygenerowanie prawidłowego XML ale z poziomu przeglądarki. Ewentualnie poprzez przeglądarkę mogę wywołać linię poleceń i wtedy generować. Ale to strasznie druciarstwo.

Ten post edytował techjaw 4.10.2020, 23:03:53
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2020, 23:03:44
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Dziwne. Jesteś na 100% pewien, że odpalasz dokładnie ten sam skrypt w konsoli? Zajrzyj do źródła strony i zobacz jakie generuje znaczki.
Go to the top of the page
+Quote Post
techjaw
post 4.10.2020, 23:05:57
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Tak tak, jestem pewien. Efekt w bashu, locale oczywiście też wskazuje UTF-8

~# php j.php
from echo : AAAКоллекция, вдохновленная картинами Климта<br><pre>from odbc: Коллекция, вдохновленная картинами Климта<br>

Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2020, 23:14:10
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Niestety nie wiem jak pomóc. Nie mam pojęcia dlaczego działa w konsoli.
Go to the top of the page
+Quote Post
techjaw
post 4.10.2020, 23:22:42
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Tak czy siak dzięki za zainteresowanie, ja właśnie też nie wiem smile.gif
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2020, 23:26:53
Post #11





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Na serio kiedyś miałem identyczne znaki zapytania jak nie ustawiłem SET NAMES. Mogę jeszcze sprawdzić czy taki skrypt w konsoli też mi wypluwa znaki zapytania czy litery, chociaż dziwne to by było, gdyby prawidłowo je zinterpretował. Wydaje mi się, że driver do bazy danych wyrzuca te znaki zapytania na wyjściu. Tylko dlaczego ta cholerna konsola dostaje prawidłowe znaki laugh.gif

EDIT

Zrobiłem test w czystym PHP i PDO, ale zadziałało mi bez SET NAMES. Nie wiem co się zmieniło, może w MySQL 8 to już nie jest potrzebne.

Ten post edytował SmokAnalog 4.10.2020, 23:49:24
Go to the top of the page
+Quote Post
trueblue
post 5.10.2020, 06:47:36
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A może tak? Choć tu nie ma rozróżnienia na to gdzie działa, a gdzie nie:
https://stackoverflow.com/questions/2831168...ss-via-pdo-odbc


--------------------
Go to the top of the page
+Quote Post
techjaw
post 5.10.2020, 14:37:48
Post #13





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Cytat(trueblue @ 5.10.2020, 07:47:36 ) *
A może tak? Choć tu nie ma rozróżnienia na to gdzie działa, a gdzie nie:
https://stackoverflow.com/questions/2831168...ss-via-pdo-odbc


Niestety, efekt za każdym razem ten sam.
Kod
from odbc: questionmark.gif?
from odbc po utf8_encode: questionmark.gif?
from odbc po mb_convert_encoding: questionmark.gif?
Go to the top of the page
+Quote Post
trueblue
post 5.10.2020, 14:51:18
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A w konsoli i w przeglądarce uruchamiane są te same wersje PHP?


--------------------
Go to the top of the page
+Quote Post
techjaw
post 5.10.2020, 17:50:39
Post #15





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Liczyłem że nie ale, tu i tu
phpinfo()
PHP Version => 7.4.7
Go to the top of the page
+Quote Post
Pyton_000
post 5.10.2020, 18:21:01
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


A przepuść stringi z echo i z bazy przez mb_strlen() i strlen() i zobacz czy ilośći się zgadzają.

Kolejnym co bym strzelał to że CLI i Apache używają innych zestawów ini. Porównaj je. Tu masz skrypty do robienia diffów https://stackoverflow.com/questions/1623681...hpinfo-settings (jeśli cli i apache dają inne wyniki to jest ot jedyna możliwość)
Go to the top of the page
+Quote Post
techjaw
post 5.10.2020, 18:51:11
Post #17





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


To oczywiście już sprawdziłem, praktycznie zrównałem je aby nie było różnic.




w zasadzie różni się tym że w jednym opcja pusta a w drugim zakomentowana, więc praktycznie to samo w cli i w apachu
php.ini changes

php.ini#disable_functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped
,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wsto
psig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_e
rror,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_
exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, ----> php.ini.save :


Ten post edytował techjaw 5.10.2020, 19:26:07
Go to the top of the page
+Quote Post
trueblue
post 6.10.2020, 17:22:34
Post #18





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Czy w opcjach tego źródła danych nie ma możliwości ustawienia kodowania?
https://www.easysoft.com/support/kb/kb01072.html


--------------------
Go to the top of the page
+Quote Post
techjaw
post 6.10.2020, 18:24:37
Post #19





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 4.10.2020

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


Oczywiście zaraz zerknę ale to jakiś wynalazek. Natomiast ciągle nie daje mi spokoju dlaczego php wyświetla prawidłowo a apache nie.
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: 16.04.2024 - 11:46