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 ěščřžýáíéďťňúů";
a zobrazí se v prohlížeči:
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 ěščřžýáíéďťňúů
Ty znaky to dělá všechny v hex: BFBDEF
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
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
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
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
Lonanek:
Ne, tím to opravdu není:
Nečitelné české znaky v chybových hláškách php
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
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
_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
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
Krakatoa [#12]:
A nebude najjednoduchšie deklarovať kódovanie stránky ako windows-1250?

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: