Уважаемые проггеры, кодеры. Второй день не получается отладить код. В url получаем переменную - закодированную в Base 64, ее нужно раскодировать. После выполнения перекодировки из base 64 в utf-8 - (по косвенным признакам перекодирование проходит успешно) - длина переменной в которую записываем результат - изменяется до ожидаемого размера. Но при выполнении команды echo $Str - выводится первый символ из перекодированной строки и скрипт прекращает работать. Испробовал разные способы перекодировки из base 64 в utf-8/ascii - везде результат один, после перекодирования, при выводе командой echo перекодированной строки - скрипт выводит первую букву и отваливается. Вот код: Код (Text): <? header('Content-Type: text/html; charset=UTF-8'); $host = $_SERVER['HTTP_HOST']; //setlocale(LC_TIME, "ru_RU.utf8"); date_default_timezone_set('Europe/Moscow'); $ip=$_SERVER['REMOTE_ADDR']; $CryptedString = $_GET['MSBS']; echo "Poluchili stroku - "; echo $CryptedString; $B64petRepl = str_replace("dodge", "/", $CryptedString); //восстановили не передаваемый в url символ / $B64petReplv2 = str_replace("horse", "+", $B64petRepl); //восстановили не передаваемый в url символ + $B64petReplv2.= "="; //добавили в конец строки base64 знак = , при передаче в url он почему то отваливается echo "---Tip peremennoi base64 --"; echo gettype($B64petReplv2), "\n"; echo "Opredelaem tip codirovki - "; echo mb_detect_encoding($B64petReplv2, "BASE64"), "\n"; //у меня определяет как ascii, но с входяще строкой должно быть все в порядке - проверял через //онлайн перекодировщики из base64 - декодирует все верно //Способ№1 $String = mb_convert_encoding ($B64petReplv2 ,"ASCII" , "BASE64" ); echo "---strlen---"; echo strlen($String); echo " ---String -- "; echo $String; //здесь выводит первую букву и вываливается //Если выводить на экран этим способом - тоже самое. Выводит первый символ и цикл прекращает работу. for($Y=0, $len=strlen($String); $Y<$len; $Y++){ echo $String{$Y}; } //Этот способ вообще не работает //$result = iconv("BASE64", "ASCII", $B64petReplv2); //echo $result; // тоже самое - после вывода первого символа выключается //$Base64decoded = base64_decode($B64petReplv2); //echo "--Posle convertacii iz base 64 v ASCII - "; //echo $Base64decoded; Буду рад любым замечаниям и предложениям. Идти путем научного тыка, проб и ошибок - местами это неэффективно. Знаний и опыта в php не хватает. Вот передаваемое значение в кодировке base64 - YQByAF8AUABcAFQADABmAHgAfwBpAGEAFwB+AGIAXwBQAFwAVAAMAHwAWABSAEMAXgBCAF4AVwBFABEAZ gBYAF8AVQBeAEYAQgARAGkAYQARAGEAQwBeAFcAVABCAEIAWABeAF8AUABdABcAfgBiAF8ARABcAFMAVABDA AwAFwBhAHIAXgBGAF8AVABDAAwAFwB+AGIAUgBeAFUAVAAMABcAfgBiAGIAVABFAEQAQQB1AFAARQBUAAwA FwB+AGIARABBAEUAWABcAFQADAAXAGYAWABfAHUAWABDAAwAFwB+AGIAfQBQAF8AVgBEAFAAVgBUAAwAA QAFAAAA= После перекодировки из base64 должна получится другая строка без смысловой нагрузки: ar_P\Tfxia~b_P\T|XRC .....
Так что не работает? Код (PHP): <?php echo base64_decode('YQByAF8AUABcAFQADABmAHgAfwBpAGEAFwB+AGIAXwBQAFwAVAAMAHwAWABSAEMAXgBCAF4AVwBFABEAZ gBYAF8AVQBeAEYAQgARAGkAYQARAGEAQwBeAFcAVABCAEIAWABeAF8AUABdABcAfgBiAF8ARABcAFMAVABDA AwAFwBhAHIAXgBGAF8AVABDAAwAFwB+AGIAUgBeAFUAVAAMABcAfgBiAGIAVABFAEQAQQB1AFAARQBUAAwA FwB+AGIARABBAEUAWABcAFQADAAXAGYAWABfAHUAWABDAAwAFwB+AGIAfQBQAF8AVgBEAFAAVgBUAAwAA QAFAAAA='); ?> результат: ar_P\Tfxia~b_P\T|XRC^B^WEfX_U^FBiaaC^WTBBX^_P]~b_D\STCar^F_TC~bR^UT~bbTEDAuPET~bDAEX\TfX_uXC~b}P_VDPVT
Для меня это удивительно, действительно работает. Внесу некоторые уточнения: Пример работает, если обращаться к скрипту из браузера. Забыл написать в исходных данных - речь идет о клиент-серверном приложении. Скрипт VBS - отправляет на сервер HTTP запрос в кодировке base 64, на сервере php скрипт выполняет перекодировку строки из base 64 в ASCII или UTF-8 и отправляет ответ клиентской части на VBS, так вот ошибка возникает именно в этом случае. Может VBS скрипт глючит? Ответ сервера вывожу через MsgBox. Добавлено спустя 4 минуты 3 секунды: Или может не хватает какой то служебной информации для php при отправке HTTP Get запроса из VBS? Попробую результат запроса от VBS не отправлять обратно VBS, а записать в MySQL и посмотреть что там. Добавлено спустя 29 минут 34 секунды: Значит так, вбил жестко, вместо вычисляемой переменной - приведенную выше base 64 строку. В браузере выдает все как должно быть, а в VBS клиенте выдает только первую букву, после чего скрипт падает. Думаю дело в какой то служебной информации, которую не отправляет VBS ->PHP.
Denis, благодарю за помощь. Результаты отладки: Тестировалась работа связки VBS клиент <-> PHP сервер. После выполнения HTTP запроса из клиента VBS данные успешно декодируются на сервере PHP функцией mb_convert_encoding или base64_decode. Проверялось - через запись в MySQL результата декодирования и последующего просмотра БД. Затем в PHP командой echo выводим ту же переменную, которую писали в MySQL - вывод должен весь уходить в VBS клиент, - результат: В клиент VBS вместо всей строки приходит только первая буква и на этом выдача в скрипт VBS прекращается. В тоже время скрипт php продолжает работать и подтверждает нам это записывая следующей командой в MySQL флаг подтверждения своей работы. Вывод: отладка клиент - серверного приложения дело непростое. Претензии к PHP функциям снимаются. Ошибка локализована - неполная передача строки в VBS, в чем причина? VBS-клиент, отправляю HTTP Get запрос через MSXML2.XMLHTTP .Send ответ получаю через него же .responseText Чем клиентское приложение VBS может отличаться от ,браузера?
Через fiddler посмотри что получает VBS-клиент по http. А где документация по MSXML2.XMLHTTP? Может это поможет http://www.microsoft.com/en-us/download/details.aspx?id=22185
Привожу лог Fiddlera - Итак, на компьютер клиента приходит вся строка! А VBS глючит - не отображает все. Можно считать задачу решенной, спасибо за внимание. P.S. возможно VBS не поддерживает кодировку UTF-8 в диалоговом окне MsgBox, или не поддерживает спец символы в ASCII.