Декодинг этих символов ->

Farsh

~ on ~ high ~ wave ~
Декодинг этих символов ->

При парсинге логов переходов с поисковиков, встречаются такие строки, типа :
"%7CCE%7CC1%7CC2%7CCF%7CD2%20%7CD0%7CD2%7CC9%7CCE%7CD4%7CC5%7CD2%7CC1%20kp-108ip"

Что есть :
"набор принтера kp-108ip"

Вопрос :
как из php преобразовать такое ?

Просто urldecode выдает :
"|ce|c1|c2|cf|d2 |d0|d2|c9|ce|d4|c5|d2|c1 kp-108ip"

Спасибо.
 

Farsh

~ on ~ high ~ wave ~
Не особо ясно, зачем в регулярке \\ и {2} ? Что мы декодируем ?
p.s. Не работает ;(
 

partizan

Новичок
Регулярку эту к результату urldecode применять, а не к исходной строке, а слеш 1 походу лишний, опечатка просто
 

Вурдалак

Продвинутый новичок
Да нет, не опечатка. Экранируется слеш. Здесь это значения не имеет.
PHP:
echo preg_replace('/\\|([0-9a-f]{2})/e', 'chr(hexdec("\\1"))', urldecode($s));
-~{}~ 25.07.10 07:56:

Кстати, в исходном примере в первой строке (исходной) hex-цифры в верхнём регистре, а чуть ниже (после urldecode) — в нижнем.
 

Farsh

~ on ~ high ~ wave ~
Кстати, в исходном примере в первой строке (исходной) hex-цифры в верхнём регистре, а чуть ниже (после urldecode) — в нижнем.
Да, забыл, что перевел ее в нижний регистр

Так, идем заново.
Исходная строка:
"%7CCE%7CC1%7CC2%7CCF%7CD2"

PHP:
$query = "%7CCE%7CC1%7CC2%7CCF%7CD2";
$query = mb_strtolower(urldecode($query), 'utf-8');

$query = preg_replace('/\\|([0-9a-f]{2})/e', 'chr(hexdec("\\1"))', $query);
var_dump($query);
Результат - куча неопознаных символов.
Вопрос - что я опять сделал не так ?
Не переведя в нижний регистр - регулярка вообще не отработает ..
 

Вурдалак

Продвинутый новичок
PHP:
header('Content-type: text/plain; charset=koi8-r');

$query = '%7CCE%7CC1%7CC2%7CCF%7CD2';
$decoded = preg_replace('/\\|([0-9a-f]{2})/ie', 'chr(hexdec("\\1"))', urldecode($query));

var_dump($decoded);
Вопросы?

-~{}~ 25.07.10 16:30:

Вообще, чисто как quoted-printable. Чё, как, зачем — непонятно.
 

Farsh

~ on ~ high ~ wave ~
Вурдалак
Вопросов нет ;)
Вопросы были, так как я понятия не имел, что результат будет в koi8-r ..
Спасибо!
 
Сверху