Pull to refresh

Comments 15

А мне кажется, что некорректно использовать знак + в УРЛ.
Если сайт сами делаете, то лучше следить за этим и писать cpp
А если контент вам юзеры заливают, лучше заменять + на plus по правилу:
Если строка содержит только + то plus
Если строка начинается с + то plus_
Если строка кончается + то _plus
Если + не в конце и не в начале, то _plus_, при этом убирая двойные _.

Вобщем думать надо как составить.

Мне кажется что нижеследующие ссылки выглядят достаточно красиво:
/langs/cpp/history
/cpp/lising
/blogs/c_plus_plus/about
/symbol/plus/info
/systems/plus_data/about
А также варианты «C‡» и «C††»

. оскорбить никого не хотел.
Попробуйте
RewriteRule ^tag/([^/]+)/$ index.php?tag=%{escape:$1} [L]
Могут быть проблемы. Ведь в случае с С++ плюс это символ, а в случае два+слова плюс это пробел
UFO just landed and posted this here
Эта проблема не баг апача, просто и mod_rewrite делает urldecode(), превращающий %20 в пробел, а %2B в +, после чего передает уже пропарсированный урл в php (в $_SERVER['QUERY_STRING']). PHP в свою очередь при разборе query_string и заполнении $_GET каждому значению делает еще один urldecode(), который превращает + в пробел. Для твоего частного случая когда необходимо получить только тег, подойдет и то правило, но что б каждый раз не добавлять/изменять правил и что б плюсы в каждом элементе $_GET оставались плюсами, можно разбирать query_string самостоятельно. Приблизительно вот так:
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.
да что ж такое) Короче с амперсандом глюк останется
это не глюк, амперсанд не имеет отношения к urlencode(), это спец-символ xml/html, который браузер при запросе к серверу преобразовывает в символ, который им заменяется (в данном случае "&"). единственная проблема которая может возникнуть — не все поисковые пауки преобразовывают "&амп;" в "&" и из-за этого ломается вся индексация. приведенный выше код борется не с этим.
я говорю о том, что при href=«urlencode('a&b')»
и RewriteRule ^/([^/]+)/$ index.php?tag=$1 [L]

tag будет равен 'a' а не 'a&b'
и ваша function _GET() не спасает от этого
А какая основная нагрузка этого поста — "+" в УРЛе, или УРЛ на свой сайт в посте?
Sign up to leave a comment.

Articles