Не нравятся результаты поиска? Попробуйте другой поиск!

Проблема с тегами


     11.08.2011    Общие вопросы, Общие вопросы по PHP    2938

вопрос
Доброе время суток. Помогите мне исправить, очень не приятную ошибку движка. Когда пользователи попадают на сайт с поисков по тегам, то выдает ошибку (данная новость не существует). Заметил что такая ошибка происходит только на русском языке. Пример http://site.ru/tags/tut+tut/ - работает нормально, а если так http://site.ru/tags/тут+тут/ - возникает ошибка что данной новости не существует, а она есть. Помогите пожалуйста!

Ответил: F1ST


Если не ошибаюсь, то такое (использование кириллицы в URL) возможно только на кодировке UTF-8, иначе, согласно стандартам URL, кирилица должна быть написана в адресной строке именно в URL кодированном виде, а не просто
буква на русском :)

Пример
site.ru/tags/тут/


А должно быть:
site.ru/tags/%F2%F3%F2/

Комментарии пользователей (16)

stoper
15 | 7

stoper - 11 августа 2011 13:45 - Юзер

А как мне тогда это сделать? В таком виде?

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 11 августа 2011 16:05 - Админ

А каким образом у вас вообще в поиск попали некорректные ссылки если двиг их генерирует в нормальном виде?

Каков вопрос - таков и ответ. Просто помните об этом.

rashpil
33

232 | 182

rashpil - 11 августа 2011 18:14 - Эксперт

Не соглашусь с ответом. Я сталкивался с подобными проблемами. Как оказалось, что это всё зависит от сервера и от настроек по-моему ФС. Но я решил у себя проблему довольно просто - перевёл злостные УРЛы на транслит. Чего и вам советую :) Если мне не станет лениво, то выкину в паблик инструкцию

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 12 августа 2011 06:49 - Админ

Конечно выкидывайте, многим будет полезно.

Каков вопрос - таков и ответ. Просто помните об этом.

F1ST
4 | 4

F1ST - 12 августа 2011 07:44 - Юзер

rashpil, я же не утверждаю, что моя версия единственно верная. Но и ошибкой это не считаю, все есть именно так. Раз есть другое решение, будем рады ознакомиться :)

stoper
15 | 7

stoper - 12 августа 2011 10:04 - Юзер

Сегодня покопался на сайте и увидел. Теги на русском в правду работают нормально в виде
site.ru/tags/%F2%F3%F2/
Данную проблему заметил в это модуле Переходы 8.9. Там теги вида
site.ru/tags/тут/
. И я понять не могу почему такая версия тегов появилась в поиске. А самое главное, что такие ссылки только в Яндексе, а гугл нормально отображает эти ссылки.

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 12 августа 2011 10:08 - Админ

Если ссылки попали в ПС, значит они чем то генерируются, например тем же модулем переходы.
А вообще лучше закрывать от ПС облако тегов - это же хренова туча дублей страниц в поиске..... релевантность падает же.

Каков вопрос - таков и ответ. Просто помните об этом.

stoper
15 | 7

stoper - 12 августа 2011 10:31 - Юзер

Спасибо за совет! Будем блокировать теги от ПС. Тогда тут рождается такой вопрос, как это сделать в robots.txt просто ставить строчку Disallow: /tags/ ?

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 12 августа 2011 10:37 - Админ

именно так,

Каков вопрос - таков и ответ. Просто помните об этом.

stoper
15 | 7

stoper - 12 августа 2011 10:40 - Юзер

Спасибо! Сайт и правду хороший помощник начинающим.

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 12 августа 2011 11:01 - Админ

Хотя, если не много тегов - это даже лучше, можно и не закрывать

Каков вопрос - таков и ответ. Просто помните об этом.

Sander
1125

1637 | 1204

Sander - 12 августа 2011 12:53 - Эксперт

Лучше сразу закрыть. Все равно со временем количество тегов вырастет...

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

ZeiN
2 | 2

ZeiN - 2 сентября 2011 13:12 - Юзер

engine.php -> после строки
$tag = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( urldecode ( $_GET['tag'] ) ) ) ), ENT_QUOTES ) );


вставляем
[code][/code]// Исправление кодировки ссылок
function get_encoding($str){
$cp_list = array('utf-8', 'windows-1251');
foreach ($cp_list as $k=>$codepage){
if (md5($str) === md5(iconv($codepage, $codepage, $str))){
return $codepage;
}
}
return null;
}
$encoding = get_encoding($tag);
if ($encoding == 'utf-8') {
$tag = iconv("UTF-8", "CP1251", $tag);
}
// Исправили :)

nowheremany
192

1659 | 1292

nowheremany - 2 сентября 2011 13:27 - Эксперт

Костыль....


Решается настройкой сервера принимать url в каком формате - utf или вин

Благодарность принимаю тут Связь

ZeiN
2 | 2

ZeiN - 2 сентября 2011 13:29 - Юзер

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

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 2 сентября 2011 13:51 - Админ

Это проблема не сайта, как написано в прессрелиде к 9.4 - глюк яндекса. )))) уже пофиксили в 9.4

Каков вопрос - таков и ответ. Просто помните об этом.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы