Сделано в Раскрутке

Архив эхоконференции RU.PHP

- RU.PHP ------------------------------------------------------------- RU.PHP -
 Msg  : #12098 [566]
 От   : Alex Krasnyansky              2:461/444.5         09 января 05, 11:44
 Кому : Andrey Kolbasenko                                 10 января 05, 21:20
 Тема : urlencode
-------------------------------------------------------------------------------
Hello Andrey.

09 янв 05 09:03, you wrote to all:
 >>  AK> После вот такой обработки:
 >>  AK> $u = _GET['var'];
 >>  AK> $i = urlencode($u);
 >>      ^^^^^^^^^^^^^^^^^^^^  ???????????????????
 >> логики автора скрипта не вижу.....
 >>  AK> Получается $i = %06%08%04%5C0%03%04%01
 >>   та не, тут должно получиться
 >> $i= %2506%2508%2504%2500%2503%2504%2501

 AK> С такими "грамотными" советами прошу не беспокоить..

"Драку заказывали?" (с)


  Ты совета просил? Ты его получил с мягким указанием на твои ошибки.  Если же 
ничего не понял - буду рассказывать ("кто дурак и где кривые руки") открытым
текстом.

 AK> У кого еще есть какие пожелания?
 AK> Объясняю для вот таких умных:


 AK> 1) Я не могу влиять на входящий запрос, %06%08%04%00%03%04%01
 AK> это udh sms запроса, идущее от smsc, и 06 08 04 00 03
 AK> 04 01 это в соответсвии со спецификацией
 AK> протокола хидер,
знаю (см. е-мыло в подписи:) И как бы с первого раза понял методом телепатии - 
чего тебе надо....

 AK>  в котором описывается
 AK> тип пришедшего сообщения, то ли это
 AK> склейка текста, то ли мелодия, то ли рингтон. И
 AK> сообщение необходимо разобрать в
 AK> соответствии с этими кодами.
  Это всё мне понятно ещё с первого раза :|.

Теперь (как я и обещал) начнём править "ошибки в голове"....
Hе обижайся - сам напросился.
 AK>  Hо проблема в том,что апач либо php такие запросы
 AK> декодируют уже на входе
 AK> и в переменной $u
 AK> $u = _GET['var'];
=== Begin Windows Clipboard ===
Parse error: parse error, unexpected '[' in d:\kran\projects\2.php
===  End Windows Clipboard  ===
  БРЕД синтаксический.
  $u= $_GET['var'];

 AK> уже присутствуют СИМВОЛЫ в соответствии с кодами %06%08..
/*
  в ней присутствует та самая хекс-последовательность (семь байт), которую тебе
smss отправил, а не какие-то "СИМВОЛЫ". И вот эту последовательность тебе и
надо анализировать. А не её производные
*/
 AK> При обратном декодировании:

 AK> $i = urlencode($u);
  БРЕД методологический. Потому что - см. комментарий двумя строками выше.
Hа кой хрен urlencode(), когда у нас уже есть хедер от smss в чистом
семибайтном виде ? Его и обрабатывай.....


Ага, понял..... Вы не умеете работать с анализом состава переменной
конструкциями вида

  ну так это Ваши проблемы.... :)




 AK> Получаем уже ерунду, которая не соответствует входящим кодам.
 я не знаю, как ты её получил. Приведенный тобой приемный скрипт _не может_
дать входящие коды... Тем более "входящие"(терминологически) - это оригинальная
семибайтная последовательность, а не её приведение к текстовому виду для
передачи по http.
 AK> Как побороть ситуацию?
  как побороть кашу у тебя в голове? легко.

смотри ниже..

1.Сначала проверим таки, появляется ли 5C0 в твоей методологии.

=== Begin 1.htm===
a
===  End Windows Clipboard  ===
(на самом деле клиент отправлял var=urlencode(тут_хекс_последовательность) - и 
для дальнейцей обработки его проще использовать.

  Я сформировал твой запрос? Так он передаётся к тебе?

Текст скрипта 2.php

=== Begin Windows Clipboard ===

===  End Windows Clipboard  ===
  Смотрим на экран, смотрим в файл === наблюдаем одно и то же....
=== Begin Windows Clipboard ===
%06%08%04%00%03%04%01
===  End Windows Clipboard  ===
  Hикакого '5C0' вместо '00' не вижу.

 В работе с примером использованы apache1.3.27, php4.3.6 и голова :). '5С0' -
смахивает на utf8.


2. Hу а теперь попытаюсь тебе показать - как всё-таки _надо_ бы делать тебе....

( в качестве бонуса тебе (чтоб не обижался))

  Итого твой скрипт может иметь примерно такой вид
===
$u=$_GET['var'];
/*
всё, у нас есть семибайтный хедер от smss в исходном виде.
чисто для наглядности можно присвоить
переменные каждому байту запроса,
хотя проще сразу оперировать c $u{n}
в анализе, без промежуточных переменных
$a=$u{0}; //0x08
$b=$u{1}; //0x06
$c=$u{2}; //0x04
$d=$u{3}; //0x00
$e=$u{4}; //0x03
$f=$u{5}; //0x04
$g=$u{6};  //0x01
и вот пример анализа
if ($d == 0x00) echo "NULL!" ;
хотя (повторяю) нагляднее (для программиста) этот вариант:
(проще отслеживать номер байта в запросе)
*/
if ($u{3} == 0x00) echo "NULL!" ;
//и так далее... весь разбор выеденного яйца
//не стОит и того времени, что я на тебя трачу
====

ps  Так что "кто дурак, а кто умный" - я не знаю, но в _дважды_ приведенном
тобой приёмном скрипте из двух строк - две ошибки (вторая - методологическая) .
Первый раз я счёл это банальными опечатками. но дважды опечатки не повторяются 
обычно....



pps естественно, ничего личного.




WBR, Alex
rootsms.kharkov.ru

--- GoldED+ 1.1.5-040120 (WinNT 5.1.2600-Service_Pack_2 i686)
 * Origin: Vivat! (2:461/444.5)


При переходе по баннеру - скидка 25% на первый месяц обслуживания!
Самый простой способ получить ROOT-доступ
При переходе по баннеру - скидка 25% на первый месяц обслуживания!