Регулярное выражение. Не работает а-яА-Я

Аватара пользователя
Artem-Samsung

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Artem-Samsung »

где лежит конфиг, и в какой кодировке сохранен?
Аватара пользователя
Sham

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Sham »

Цитата Sham:



где лежит конфиг, и в какой кодировке сохранен?
Регулярное выражение. Не работает а-яА-Я




если .htaccess имеется ввиду, то utf-8
Аватара пользователя
Sham

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Sham »

С передним слешем непонятно (какой путь получает правило, если с передним слешем, то добавьте \/? вначале). Сложно, не видя всего. Так вроде без ошибок.
Аватара пользователя
Artem-Samsung

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Artem-Samsung »

В корне:



/



Код:

Код: Выделить всё

enca -L ru .htaccess
Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from ISO-8859-5

Если конфиги движка:



/config





Код:

Код: Выделить всё

enca -L ru *
config.inc.php: 7bit ASCII characters
index.php.htm: 7bit ASCII characters
settings.inc.php: 7bit ASCII characters
smarty.config.inc.php: 7bit ASCII characters

так не стало лучше:

RewriteRule ^\/?([a-zA-Zа-яА-Я0-9\%\-]+)/([0-9]+)\-(.*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
Аватара пользователя
Sham

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Sham »

Цитата Sham:



а зачем флаг E? он для переменной...
Регулярное выражение. Не работает а-яА-Я




по дефолту стоял, я и оставил

движок: prestashop
Аватара пользователя
Sham

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Sham »

имхо сервер неправильно декодирует путь и правило получает уже неверную кодировку. Попробуйте вывести, что получает правило (echo $_SERVER['QUERY_STRING'] //upd: или $_GET['all'] тогда) c правилом

upd: без условия может зациклить



Код:

Код: Выделить всё

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /product.php?all=$1 [L]

и смотрите кодировку этих символов



так имхо надежнее



Код:

Код: Выделить всё

RewriteRule ^\/?[^\/]+/([0-9]+)\-.*\.html$ /product.php?id_product=$1 [L]
Аватара пользователя
Sham

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Sham »

apache 2.2, htaccess в utf8: если в правиле напрямую кириллицу указывать, то работает, если в 16-ричном (типа \xC1) - то нет. Но при выводе пути (в браузер) кириллица все-равно преобразована неправильно.



Т.е. с кириллицей в пути URLa лучше не связываться, т.к. непонятно, как декодируются из экранированного пути. При этом get-параметры декодируются веб-сервером правильно, как ни странно.



Можно предположить, что экранированный путь декодируется в системную кодировку сервера (в кодировку файловой системы), из-за этого неувязочка.
Аватара пользователя
Artem-Samsung

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Artem-Samsung »

Цитата Sham:



Т.е. с кириллицей в пути URLa лучше не связываться, т.к. непонятно, как декодируются из экранированного пути. При этом get-параметры декодируются веб-сервером правильно, как ни странно.
Регулярное выражение. Не работает а-яА-Я




а иногда очень нужно.

я вот, если сам какой то движок мини делаю, то с кириллицей поступаю так.

В .htaccess пишу:



Код:

Код: Выделить всё

AddDefaultCharset UTF-8
DirectoryIndex index.php.htm
Options +FollowSymlinks
RewriteEngine On
RewriteRule .* index.php.htm

в index.php.htm



PHP код:

Код: Выделить всё

$request_url = mb_convert_encoding(substr(urldecode($_SERVER['REQUEST_URI']), 1), 'utf-8', 'auto');
$de_link = explode("/", $request_url);

if ($request_url=="index.php.htm" || $request_url == "" || $de_link[0] == "Главная") {
    include('');
} else if (ereg("^p[0-9]*$", $de_link[0])) {
    include('');
} 
} else if ($de_link[0] == "Опрос" && count($de_link) == 2) {
   include('');
else {
    include('modules/content/main.php');
} 






ну и т.п.

прокомментриуйте пожалуйста способ))
Аватара пользователя
Sham

Re: Регулярное выражение. Не работает а-яА-Я

Сообщение Sham »

если
Цитата Artem-Samsung:



mb_convert_encoding
Регулярное выражение. Не работает а-яА-Я




работает как нужно (на выходе кириллица), и index.php.htm в utf8, то пойдет.


Цитата Artem-Samsung:



include('');
Регулярное выражение. Не работает а-яА-Я




непонятно.



в правиле можно направлять на этот скрипт только урлы, содержащие нелатиницу [^\w] или [^a-zA-Z0-9\/\-\_\.] - и в таком духе (набор символов определяется на практике).



не спамь в полезняшки
Ответить

Вернуться в «Вебмастеру»