
|
|
Архив эхоконференции 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 в чистом
семибайтном виде ? Его и обрабатывай.....
Ага, понял..... Вы не умеете работать с анализом состава переменной
конструкциями вида
if ($u{4}==0x00) ....
///
if ($u{0}!=0x06).....
///и т.п.
?>
ну так это Ваши проблемы.... :)
AK> Получаем уже ерунду, которая не соответствует входящим кодам.
я не знаю, как ты её получил. Приведенный тобой приемный скрипт _не может_
дать входящие коды... Тем более "входящие"(терминологически) - это оригинальная
семибайтная последовательность, а не её приведение к текстовому виду для
передачи по http.
AK> Как побороть ситуацию?
как побороть кашу у тебя в голове? легко.
смотри ниже..
1.Сначала проверим таки, появляется ли 5C0 в твоей методологии.
=== Begin 1.htm===
a
=== End Windows Clipboard ===
(на самом деле клиент отправлял var=urlencode(тут_хекс_последовательность) - и
для дальнейцей обработки его проще использовать.
Я сформировал твой запрос? Так он передаётся к тебе?
Текст скрипта 2.php
=== Begin Windows Clipboard ===
$u=$_GET['var'];
$i=urlencode($u);
$f=fopen("aaa.txt","w+");
fwrite($f,$i);
fclose($f);
echo $i;
?>
=== 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
root
![]() При переходе по баннеру - скидка 25% на первый месяц обслуживания! |