Autor | Zpráva | ||
---|---|---|---|
Krakatoa Profil |
Mám svůj balíček apache + php + mysql, ale zkoušel jsem to i s Vertrigem a situace je stejná.
Když mám nějakou chybovou hlášku v php a je tam nějaká chybová hláška asi poslaná z Windows, tak je nečitelná. Příklad: <?php $fp = fsockopen ("127.0.0.1", 8080); if (!$fp) echo "Nepřipojeno ěščřžýáíéďťňúů"; Warning: fsockopen(): unable to connect to 127.0.0.1:8080 (Nemohlo b�t vytvo�eno ��dn� p�ipojen�, proto�e c�lov� po��ta� je aktivn� odm�tl. ) in C:\Levtrigo\www\test.php on line 2 Nepřipojeno ěščřžýáíéďťňúů tj, jeden otazník je BFBDEF Dá se to nějak pořešit, aby to ten výstup dělalo apache/php korektně správně česky? Jen doplním: používám Win 10 64bit, používám apache 64bit z apachelounge a php 64bit originální. Vertrigo zkoušeno 64bit. |
||
Jan Tvrdík Profil |
#2 · Zasláno: 5. 6. 2016, 16:26:32
Krakatoa:
V jakém kódování máš uložený ten PHP soubor? |
||
Krakatoa Profil |
Jan Tvrdík:
UTF-8 zkoušeno i s: UTF-8 s BOM - výsledek stejný ANSI (poznámkový blok) nebo Windows CP1250 (PSPad) - změna logicky jen u těch znaků vypsaných pomocí echo Unicode a Unicode Big Endian v poznámkovém bloku - php to nezpracuje a script vidím v prohlížeči po zobrazení zdrojového kódu stránky Podle mě je to sice chyba kódování, ale přímo v php. Co se týče například toho fsockopen, tak třeba utorrent při chybě spojení tuto hlášku zobrazí správně. Převezme ji z Windows, protože v lokalizaci uvedená není. Nedovedl by to někdo nějak nahlásit vývojářům php ať to nějak pořeší? :-) |
||
Keeehi Profil |
#4 · Zasláno: 5. 6. 2016, 21:30:49
Krakatoa:
A není to spíš tím, že to Windows posílá v nějakém svém 1250, 1252 nebo tak nějak a ty to cpeš bez úprav do Stránky která se prohlašuje za utf8? Navíc žádné chybové hlášky bys neměl zobrazovat. Takže i kdyby se ti to nepodařilo překódovat, tak by to nemělo vadit. |
||
Krakatoa Profil |
Keeehi:
Jenže php to neposílá ani v UTF-8, ani ve win1250, ani v čemkoliv jiným, php to myslím posílá zmršený (vše BFBDEF). A to je problém php. Přece to, že php tu hlášku neumí zpracovat ve správném kódování a poslat ji ve správném kódování, tak je problém php. Ne, php tu hlášku převezme z windows, zmrší ji a zmršenou ji pošle. K čemu to tedy je? Ať ji tam php rači neposílá vůbec. Tak jako na funkci to vliv nemá, jen mě irituje, když něco testuju, že furt tam vidím zmršené hlášky. A správně zpracovat ty hlášky z Windows přece nebude problém: ![]() |
||
Lonanek Profil |
#6 · Zasláno: 5. 6. 2016, 21:47:25
Ne to není problém php, ale problém nastavení znakové sady prohlížeče. Pokud máte soubory v UTF-8 bez BOM, pak na začátku každého scriptu pošlete prohlížeči informaci o nastavení znakové sady.
|
||
Krakatoa Profil |
#7 · Zasláno: 5. 6. 2016, 21:52:09
|
||
Lonanek Profil |
No když není, tak není.
A prohlížeč má jaké výchozí kódování? Já používám výhradně UTF-8 a nikdy jsem s tím problém neměl. |
||
CZechBoY Profil |
#9 · Zasláno: 5. 6. 2016, 22:03:48
To kodování se oficiálně jmenuje "žádný kodování", nebo kde berete jistotu, že to php nekoduje? :-)
Zkuste nastavit kodování v htaccess/apache conf. |
||
Krakatoa Profil |
Lonanek:
No je jedno jaké má prohlížeč kódování. CZechBoY: No, v prvním příspěvku jsem se spletl, netuším jak se mi to mohlo podařit, to hex je: EFBFBD a je to znak otazníku v UTF-8: apps.timwhitlock.info/unicode/inspect?s=%EF%BF%BD Takže php to posílá sice v UTF-8, ale jaksi místo českých znaků posílá otazník (EFBFBD), takže jak jsem psal, posílá to zmršený (wireshark): ![]() Netuším co nastavit v httpd.conf a nejsem si ani jist, jestli to nějak ovlivňuje ty hlášky, v httpd.conf mám co se týče znakových sad a jazyka toto: DefaultLanguage cs AddLanguage cs .cz .cs LanguagePriority cs ForceLanguagePriority Prefer Fallback AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen AddCharset WINDOWS-1250 .cp-1250 .win-1250 AddCharset UTF-8 .utf8 |
||
_es Profil |
Krakatoa:
„Jenže php to neposílá ani v UTF-8, ani ve win1250, ani v čemkoliv jiným, php to myslím posílá zmršený (vše BFBDEF). A to je problém php.“ Ale PHP predsa „nevie“ v akom kódovaní posiela nejaký lokálny proxy server chybové hlášky, posiela ich ďalej „tak ako sú“. Zjavne sú v niečom inom ako v UTF-8. Takže aby bolo kódovanie hlášok správne, tak buď zmeň deklaráciou kódovania stránky na kódovanie hlášok, alebo hlášky nejako v PHP „prekóduj“ na UTF-8, alebo „presvedč“ proxy server, aby boli hlášky v UTF-8. |
||
Krakatoa Profil |
#12 · Zasláno: 5. 6. 2016, 23:35:42
_es:
Aha, něco na tom bude. Když ten script vykonám přes php -q test.php>test.txt tak ta chybová hláška je ve win1250/ANSI a korektní. Funkce Windows (např. Winsock) jsou popsané a je jasné, v jakém kodování posílají výstup (ANSI nebo Unicode pokud se nastaví), tak jak neví? Tak jak teda donutit apache/php aby posílal chybové hlášky z Windows v ANSI (win1250) ve výstupu UTF-8 v kódování UTF-8? |
||
Keeehi Profil |
#13 · Zasláno: 6. 6. 2016, 00:22:33
K něčemu takovému asi PHP nedonutíš. Můžeš však text chyby získat pomcí
error_get_last() překódovat s iconv() a pak vypsat. Jelikož je ale vypisovat nebudeš, tak to vlastně řešit nepotřebuješ.
|
||
_es Profil |
#14 · Zasláno: 6. 6. 2016, 08:05:43
|
||
Časová prodleva: 7 let
|
0