Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kodowanie znaków wyniku shell_exec
Forum PHP.pl > Forum > PHP
tomasz.milczarek
Helloł,
mam potrzebę wykonywania przez php reconnect'a połączenia dial-up'owego. I wszystko byłoby w porządku, gdyby nie krzaki jakie widzę w wyniku. Kodzik:

CODE
<?
$wy = shell_exec('rasdial bc /disconnect');
$wy .= shell_exec('rasdial bc');
echo "$wy";
?>


Wynik wygląda tak:
Polecenie zosta�o wykonane pomy�lnie.
Trwa ��czenie z BC...
Trwa weryfikowanie nazwy u�ytkownika i has�a...
Trwa rejestrowanie komputera w sieci...
Pomy�lnie po��czono z BC.
Polecenie zosta�o wykonane pomy�lnie.
Próbowałem zmieniać kodowania na wszystkie możliwe sposoby - bez skutku.
Może macie jakieś sugestie, lub wiecie co to za przedziwne kodowanie jest używane w konsoli windy i zwracane przez shell_execa?
grubyx
Witaj.
Wydaje mi się, że jednak źle ustawileś kodowanie. Jakie masz ustawione kodowanie na stronie ? Jakie w serwerze www (używasz apache)? I krzaki są dlatego, że polecenie windosowe używa swojego kodowania, które jest inne niż ustawione na stronie/serwerze www.

EDIT:
A spróbuj zrobić tak:
Kod
<?
$wy = shell_exec('rasdial bc /disconnect > C:\blah.txt');
$wy .= shell_exec('rasdial bc > C:\blah2.txt');
echo "$wy";
?>

I poprostu postraj się zamienić krzaki z plików C:\blah.txt i C:\blah2.txt na normalne litery i wyświetl ich zawartośc po zmianie.
Nie testowałem więc nie wiem czy się uda, ale spróbować zawsze możesz.
EDIT 2:
Właśnie zrobiłem coś podobnego i działa, kod:
Kod
<?
$file = 'C:\blah.txt';

$wy = shell_exec('ipconfig /all > ' . $file);

if(!file_exists($file))
die('Plik nie został utworzony');

$fh = @fopen($file, "r");

if(!$fh) die('Nie można otworzyć pliku');

$windows = array('Ę', 'Ó', 'Ą', 'Ś', 'Ł', 'Ż', 'Ź', 'Ć', 'Ń', 'ę', 'ó', 'ą', 'ś', 'ł', 'ż', 'ź', 'ń'); // kodowanie windows-1250
$iso = array('Ę', 'Ó', 'ˇ', 'Ś', 'Ł', 'Ż', 'Ź', 'Ć', 'Ń', 'ę', 'ó', 'ą', 'ś', 'ł', 'ż', 'Ľ', 'ń'); // kodowanie iso-8859-2
$w = '';

while($line = fgets($fh)) {
$l = str_replace($windows, $iso, $line);
$w .= $l;
}
@unlink($file);

echo "<pre>$w</pre>";
?>

Pozdrawiam.
tomasz.milczarek
Zrobiłem jak zaleciłeś, ale nadal mam:
Juž masz po�Ľczenie z bc.
Polecenie zosta�o wykonane pomy�lnie.
Zapisałem wynik do pliku sugerując się Twoim tokiem rozumowania i sprawdziłem kodowanie po nieudanych próbach:
Kodowanie: IBM CP852 (Europa Środkowa)

To jest stare dosowe kodowanie konsoli, rozważam wyciągnięcie binarek tych znaków i podmianę tych binarek na jakieś normalne znaki..

Może różnica tkwi w platformie - serwer o którym mowa jest na win2003.

Dzięki za naprowadzenie, bo przyznam nie wpadłem na zapis do pliku, a dzięki temu sprawdziłem przynajmniej kodowanie winksmiley.jpg
grubyx
A zamień tablicę $windows na taką:
  1. <?php
  2. $windows = array('¨', 'ŕ', '¤', '—', 'ť', '˝', 'Ť', 'Ť', 'ă', '&copy;', '˘', 'Ą', '˜', 'ˆ', 'ľ', '&laquo;', 'ä');
  3. ?>

i zobacz czy będzie działało snitch.gif
tomasz.milczarek
Nie działa.
Ale otworzyłem pliki wyjściowe hex edytorem, podpatrzyłem i wstawiłem hex'ami te znaki do tablicy $windows i jest ok.
Póki co mam tylko konwersję 4 znaków, ale jak podpatrzę resztę znaków, to uzupełnię.
Na razie tablice wyglądają tak:

$windows = array("\xa5", "\x98", "\x88", "\xbe"); // kodowanie CP852
$iso = array('ą', 'ś', 'ł', 'ż'); // kodowanie iso-8859-2

i śmiga winksmiley.jpg

Dzięki i pozdrowionka serdeczne smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.