Російські літери в url сторінок - повідомлення на

IE6: ф? Q = ф
FF3.0: .1% 84? Q =% F4
Chrome4: .1% 84? Q = .1% 84

Особливо порадував Фаерфокс. Який символи в частині path закодував як UTF-8, а в частині query - як CP-1251 (взагалі повний привіт, по-моєму).

upd: перевірив: від кодування сторінки результат не залежить ні в одному браузері.

Пролийте хтось промінь світла, будь ласка.

Зазвичай кирилицю в URL кодують з полмощью методів encodeURI і encodeURIComponent.

Firefox надійшов рівно так, як очікується: url кодується в utf8 (така домовленість),
дані форми приїжджають в кодуванні сторінки (так чекатимуть скрипти). ІЕ6 писався
американцями, які не знають нічого, крім latin1 (пор. з IE7, який писали індійці).
Хром засмутив :( Мабуть, він писався американцями, які вірять, що заміна latin1 на
utf8 веде до вирішення всіх проблем з кодуваннями.

Rule of thumb: не використовувати російські букви в url і параметри очікувати в кодуванні сторінки.

Кодування - це наступний крок.

Проблема ж виникає ще до кодування, тому що то, що буде кодуватися, в різних браузерах виявляється різний.
З IE 6 прийде закодоване ф? Q = ф. з FF - закодоване .1% 84? q =% F4. І чорт ногу зломить, що це одна і та ж сторінка прийшла.

Спеціально для Фаерфокса:

Результат той же. Причому не змінюється, якщо кодування поміняти на latin-1.

Так що дані форми приїжджають, скоріше, в кодуванні вінди, ніж в кодуванні сторінки (це єдине у мене припущення, чому він так наполегливо кодує GET-запит в CP-1251), а URL кодується як UTF-8.

Rule of thumb: не використовувати російські букви в url і параметри очікувати в кодуванні сторінки.


На жаль, мені потрібно збирати дані не зі своїх сторінок. Які невідомо в якому браузері проглядаються і взагалі невідомо ким робилися ..

Я вже щас думаю - чи не складе список user-agent'ов по найпоширенішим браузерам і не розібрати чи кожен випадок руками.
Цікаво, як liveinternet з цим впорався.

Загалом, треба думати. Відчуваю, крім якоїсь дикості нічого не придумається ..

Якщо не вдаватися в нетрі кодування кирилиці браузерами, а вирішувати поставлену задачу (збирати урли і Реферер js-лічильниками), то можна взяти рішення ліру. Ось код їх лічильника:


Якщо придивитися, зауважимо, що для кодування урлов вони використовують метод escape, який переводить рядок в шістнадцятковий Unicode. На сервері необхідно для отриманих полів виконати unescape. Такий функції в PHP немає, але можна знайти реалізації. Після php_unescape (обізвав для прикладу) виконай на сервері urldecode, на випадок, якщо URL був в стандартній кодуванні URI.

Воно? Або я не так зрозумів завдання.

Так, воно саме (я, в общем-то, його і використовував, просто подекуди переплутав, тому у мене були помилки).

Мені тут прийшло кілька думок, з яких викладу поки дві:

2. Math.random () покликана не допустити кешування. Чи не можна цього домогтися, віддаючи з сервера лічильника зображення з заголовком "Cache-control: no-cache"?

Referer не завжди передається - security, файрволи та деякі клієнти його ріжуть. no-cache не на всі клієнти діє. Бувають, наприклад, випадки, що в локальній мережі варто кешуючий проксі (заради економії трафіку), який на no-cahe забиває.