parser


 

 
   команды управления поиском

Ещё раз и подробно + решение проблемы для Win и Denwer 3

Petr_04 29.09.2010 15:09 / 29.09.2010 15:15

ОС: Windows
Версии ПО:
denwer 3
apache 2.2.4

Задача:
Передавать в URL символы кириллицы в формате UTF-8 для разбора и поиска в БД (тэги).

Проблема:
$request:uri
$env:QUERY_STRING
Приходят в формате %xx и сравнение со строкой из БД (и в тексте скрипта) в формате UTF не возможно, т.к. строки будут не равны.

Некоторые варианты решения проблемы:
1. Самый простой способ (но не подходящий для меня из-за используемых версий ПО) - использовать mod_rewrite с ключом B, как предлагают Misha v.3 и G_Z.
Ключ B появился в 2.2.7, в моём случае 2.2.4, поэтому выдаётся ошибка и в логах появляется запись, что ключ B не опознан.
Передача строки запроса идёт через $form.
2. Кривоватый, но работоспособный.
Передача строки запроса идёт также через $form, но в качестве параметра используем %{THE_REQUEST} - "сырой" запрос. Однако строка с этим запросом будет иметь вид: GET /статьи HTTP/1.1, т.е. содержать лишнюю информацию и требует работы топором (split). После чего, получаем табличку cmd. cmd.1 содержит искомую строку запроса в формате UTF.

.htaccess
ErrorDocument 404 /index.html

<IfModule mod_rewrite.c> 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$  index.html?req=%{THE_REQUEST} [L]
</IfModule>
index.html
$comands[$form:req]
$cmd[^comands.split[^#20;lh]]
Т.к. у меня будет всего один обработчик - index.html, то буду ещё и делить на POST и GET, которые можно брать либо из $env:REQUEST_METHOD либо из разбитой строки (индекс 0).

Возможно есть и другие варианты передачи "сырой" строки запроса.
Буду рад, если кто-то поделится.
Для юникс системы разбиение не потребуется, т.к. там уже будет работать ключ [B], хотя нужно будет ещё посмотреть, как он работает :)