Комментарии 15
Спасибо, возьму на заметку)
-2
А мне кажется, что некорректно использовать знак + в УРЛ.
Если сайт сами делаете, то лучше следить за этим и писать cpp
А если контент вам юзеры заливают, лучше заменять + на plus по правилу:
Если строка содержит только + то plus
Если строка начинается с + то plus_
Если строка кончается + то _plus
Если + не в конце и не в начале, то _plus_, при этом убирая двойные _.
Вобщем думать надо как составить.
Мне кажется что нижеследующие ссылки выглядят достаточно красиво:
/langs/cpp/history
/cpp/lising
/blogs/c_plus_plus/about
/symbol/plus/info
/systems/plus_data/about
Если сайт сами делаете, то лучше следить за этим и писать cpp
А если контент вам юзеры заливают, лучше заменять + на plus по правилу:
Если строка содержит только + то plus
Если строка начинается с + то plus_
Если строка кончается + то _plus
Если + не в конце и не в начале, то _plus_, при этом убирая двойные _.
Вобщем думать надо как составить.
Мне кажется что нижеследующие ссылки выглядят достаточно красиво:
/langs/cpp/history
/cpp/lising
/blogs/c_plus_plus/about
/symbol/plus/info
/systems/plus_data/about
+2
Попробуйте
RewriteRule ^tag/([^/]+)/$ index.php?tag=%{escape:$1} [L]
RewriteRule ^tag/([^/]+)/$ index.php?tag=%{escape:$1} [L]
0
Эта проблема не баг апача, просто и mod_rewrite делает urldecode(), превращающий %20 в пробел, а %2B в +, после чего передает уже пропарсированный урл в php (в $_SERVER['QUERY_STRING']). PHP в свою очередь при разборе query_string и заполнении $_GET каждому значению делает еще один urldecode(), который превращает + в пробел. Для твоего частного случая когда необходимо получить только тег, подойдет и то правило, но что б каждый раз не добавлять/изменять правил и что б плюсы в каждом элементе $_GET оставались плюсами, можно разбирать query_string самостоятельно. Приблизительно вот так:
Ну и конечно при формировании ссылки на сайте пробел необходимо заменять не на "+", а на %20, а плюс в свою очередь на %2B.
function _GET() { $pairs = explode('&', $_SERVER['QUERY_STRING']); $get = array(); foreach ($pairs as $pair) { list($key, $value) = split('=', $pair); $get[$key] = $value; } return $get; } $_GET = _GET();
Ну и конечно при формировании ссылки на сайте пробел необходимо заменять не на "+", а на %20, а плюс в свою очередь на %2B.
+2
А как на счет site/x=a&b
0
то есть site/a&b/
0
да что ж такое) Короче с амперсандом глюк останется
0
это не глюк, амперсанд не имеет отношения к urlencode(), это спец-символ xml/html, который браузер при запросе к серверу преобразовывает в символ, который им заменяется (в данном случае "&"). единственная проблема которая может возникнуть — не все поисковые пауки преобразовывают "&амп;" в "&" и из-за этого ломается вся индексация. приведенный выше код борется не с этим.
+1
А какая основная нагрузка этого поста — "+" в УРЛе, или УРЛ на свой сайт в посте?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Интересная проблема в .htaccess или спецсимволы, mod_rewrite и тег C++.