Разбор адресной строки

Фанат

oncle terrible
Команда форума
SiMM
preg_replace('/%(?:25)?([0-9a-f]{2})/sei','chr(hexdec("$1"))',$str); - это перекодировщик из урленкодед утф-16?
А что такое утф-16?
А как ты определил, что это именно 16,а не 8, скажем, или кои-8?
Я, похоже, сильно отстал от жизни
 

SiMM

Новичок
tony2001, естесственно. Проблема в том, что он не парсит строки, если в них есть символы, закодированные двумя байтами, а не одним.
PHP:
$str = 'text%3D%25D0%25CF%25CB%25D5%25D0%25C1%25C5%25CD%2B%25CD%25C1%25D3%25CC%25C1%2B%25C9%25CE%25C4%25D5%25D3%25D4%25D2%25C9%25C1%25CC%25D8%25CE%25D9%25C5%26stype%3Dwww';
parse_str($str, &$arr);
var_dump($arr);
-~{}~ 10.11.04 17:06:

Фанат, хз - я же говорю - догадался эмпирически. Действительно, у UTF-16 диапазон кириллицы другой (0x400-0x4FF).
 

Фанат

oncle terrible
Команда форума
вот гугль, кстати, честно пишет, в какой кодировке строка закодирована.
А с остальными - это шаманство.
 

imdem

Guest
итог)))

1. да тему надо было назвать разбор и ПЕРЕКОДИРОВКА адресной строки
2.символы 25 в %25xx мона просто игнорировать..и тогда задача сводится к простой перекодировке последовательности шестнадцатиричных символов ))

Спасибо всем...и тони))) и в особенности симм)) за сразурезультат))

тони...прости меня бестолкового...я просто был зациклен на том что четырехзначная кодировка должна как то хитро преобразовываться а не путем выбрасывания лишних символов)))


*зато получил опты работы с регулярными выражениями))
 

SiMM

Новичок
imdem, у меня один вопрос остался - как ты получил эту строку запроса? OS, какая локализация, браузер (просто на будущее, чтобы знать). И что это за кодировка :)
 

imdem

Guest
$_SERVER['HTTP_REFERER'];
пхп под апачем на каком то юниксе
какой браузер - походу не знаю - не храню эту информацию))) - могу в принципе логи глянуть если интересно)
 

Yuriy_S

-=PHP-Club=-
imdem: ты не так пробовал :)

array(2) { ["text"]=> string(54) "Реферат Атеросклероз артерий - наступление на здоровье" ["stype"]=> string(3) "www" }
 

SiMM

Новичок
Yuriy_S, версия PHP и как пробовал? На 4.3.9 мой пример от 10.11.04 17:05 выдаёт
Код:
array(1) {
  ["text=%D0%CF%CB%D5%D0%C1%C5%CD+%CD%C1%D3%CC%C1+%C9%CE%C4%D5%D3%D4%D2%C9%C1%CC%D8%CE%D9%C5&stype=www"]=>
  string(0) ""
}
imdem, ладно, забей на логи.
 

imdem

Guest
Originally posted by Yuriy_S
imdem: ты не так пробовал :)

array(2) { ["text"]=> string(54) "Реферат Атеросклероз артерий - наступление на здоровье" ["stype"]=> string(3) "www" }
в общем фишка в том что в примерах которые я привел оказалась разная кодировка

и в одном случае самый простой способ - это тот, который предложил тони, в другом случае - симм))

посижу - подумаю как красивее насписать...мож объединю в одно))


*соотвественно теперь надо подумать как карсиво определить кодировку) - то есть чтоб не в лоб проверять что там после text идет - "=" или "%3D"
 

SiMM

Новичок
imdem, самый простой вариант, имхо (в данном конкретном случае) - сделать preg_replace('#%25([0-9A-F]{2})#s','%$1',$str), после чего воспользоваться методом tony2001 - работать будет при любом раскладе.
 
Сверху