Регулярное выражение. Не работает а-яА-Я
-
Artem-Samsung
-
Sham
Re: Регулярное выражение. Не работает а-яА-Я
Цитата Sham:
где лежит конфиг, и в какой кодировке сохранен?
если .htaccess имеется ввиду, то utf-8
где лежит конфиг, и в какой кодировке сохранен?
Регулярное выражение. Не работает а-яА-Я
если .htaccess имеется ввиду, то utf-8
-
Sham
Re: Регулярное выражение. Не работает а-яА-Я
С передним слешем непонятно (какой путь получает правило, если с передним слешем, то добавьте \/? вначале). Сложно, не видя всего. Так вроде без ошибок.
-
Artem-Samsung
Re: Регулярное выражение. Не работает а-яА-Я
В корне:
/
Код:
Если конфиги движка:
/config
Код:
так не стало лучше:
RewriteRule ^\/?([a-zA-Zа-яА-Я0-9\%\-]+)/([0-9]+)\-(.*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
/
Код:
Код: Выделить всё
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
-
Sham
Re: Регулярное выражение. Не работает а-яА-Я
Цитата Sham:
а зачем флаг E? он для переменной...
по дефолту стоял, я и оставил
движок: prestashop
а зачем флаг E? он для переменной...
Регулярное выражение. Не работает а-яА-Я
по дефолту стоял, я и оставил
движок: prestashop
-
Sham
Re: Регулярное выражение. Не работает а-яА-Я
имхо сервер неправильно декодирует путь и правило получает уже неверную кодировку. Попробуйте вывести, что получает правило (echo $_SERVER['QUERY_STRING'] //upd: или $_GET['all'] тогда) c правилом
upd: без условия может зациклить
Код:
и смотрите кодировку этих символов
так имхо надежнее
Код:
upd: без условия может зациклить
Код:
Код: Выделить всё
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /product.php?all=$1 [L]и смотрите кодировку этих символов
так имхо надежнее
Код:
Код: Выделить всё
RewriteRule ^\/?[^\/]+/([0-9]+)\-.*\.html$ /product.php?id_product=$1 [L]-
Sham
Re: Регулярное выражение. Не работает а-яА-Я
apache 2.2, htaccess в utf8: если в правиле напрямую кириллицу указывать, то работает, если в 16-ричном (типа \xC1) - то нет. Но при выводе пути (в браузер) кириллица все-равно преобразована неправильно.
Т.е. с кириллицей в пути URLa лучше не связываться, т.к. непонятно, как декодируются из экранированного пути. При этом get-параметры декодируются веб-сервером правильно, как ни странно.
Можно предположить, что экранированный путь декодируется в системную кодировку сервера (в кодировку файловой системы), из-за этого неувязочка.
Т.е. с кириллицей в пути URLa лучше не связываться, т.к. непонятно, как декодируются из экранированного пути. При этом get-параметры декодируются веб-сервером правильно, как ни странно.
Можно предположить, что экранированный путь декодируется в системную кодировку сервера (в кодировку файловой системы), из-за этого неувязочка.
-
Artem-Samsung
Re: Регулярное выражение. Не работает а-яА-Я
Цитата Sham:
Т.е. с кириллицей в пути URLa лучше не связываться, т.к. непонятно, как декодируются из экранированного пути. При этом get-параметры декодируются веб-сервером правильно, как ни странно.
а иногда очень нужно.
я вот, если сам какой то движок мини делаю, то с кириллицей поступаю так.
В .htaccess пишу:
Код:
в index.php.htm
PHP код:
ну и т.п.
прокомментриуйте пожалуйста способ))
Т.е. с кириллицей в пути 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: Регулярное выражение. Не работает а-яА-Я
если
Цитата Artem-Samsung:
mb_convert_encoding
работает как нужно (на выходе кириллица), и index.php.htm в utf8, то пойдет.
Цитата Artem-Samsung:
include('');
непонятно.
в правиле можно направлять на этот скрипт только урлы, содержащие нелатиницу [^\w] или [^a-zA-Z0-9\/\-\_\.] - и в таком духе (набор символов определяется на практике).
не спамь в полезняшки
Цитата Artem-Samsung:
mb_convert_encoding
Регулярное выражение. Не работает а-яА-Я
работает как нужно (на выходе кириллица), и index.php.htm в utf8, то пойдет.
Цитата Artem-Samsung:
include('');
Регулярное выражение. Не работает а-яА-Я
непонятно.
в правиле можно направлять на этот скрипт только урлы, содержащие нелатиницу [^\w] или [^a-zA-Z0-9\/\-\_\.] - и в таком духе (набор символов определяется на практике).
не спамь в полезняшки