Как сделать мод реврайт с site.ru/poisk.php?text=%F1%F2%EE%EB ?

123
[Удален]
#11

да не, ссылку надо в UTF8 выдавать

[Удален]
#12

Гадость состоит в том, что браузер при отправке запроса к серверу не указывает кодировку запроса, поэтому национальные символы должны кодироваться в какаху вида %D1%FA и т.д.

Проверяйте переменную на наличие символов вроде Џ,Ѓ,±,Ў,µ,Ќ,Ђ,† - это, например, похоже на cp-1251 принятый как utf-8, если такие крокозябры найдены - юзайте $string=iconv('windows-1251', 'utf-8', $string);

Например у вас в cp1251 ссылка

"Съешь еще этих мягких французских булок, да выпей чаю"

Большинство браузеров без url-кодирования передадут её криво:

РЎСЉРµС?СЊ еще этих РјСЏРіРєРёС… французских булок, РґР° выпей чаю

так что если не хотите её пересобачивать в url-кодированную

%D1%FA%E5%F8%FC+%E5%F9%E5+%FD%F2%E8%F5+%EC%FF%E3%EA%E8%F5+%F4%F0%E0%ED%F6%F3%E7%F1%EA%E8%F5+%E1%F3%EB%EE%EA%2C+%E4%E0+%E2%FB%EF%E5%E9+%F7%E0%FE

передавайте не сразу в poisk.php, а в скрипт проверки кодировки, а из него уже вызывайте поиск.

Яндекс и рамблер, кстати, русские cp-1251 ссылки жрут отлично, а гугльботу надо в обработчике писать что-нибудь вроде:

if (preg_match('/(googlebot)/i', $_SERVER['HTTP_USER_AGENT']))

{

$string= iconv('utf-8', 'windows-1251', $string);

}

Вобщем яше скормил 60 000 страниц со смешанными url (ru/en) - прошло отлично, гугль 200 сожрал после вышеописанной корректировки по имени бота.

Вот такие результаты экспериментов.

ЗЫ Мозги к вечеру не варят, мог чего понапутать...

root
На сайте с 04.07.2006
Offline
196
#13
saurongorynich:
if (preg_match('/(googlebot)/i', $_SERVER['HTTP_USER_AGENT']))
{
$string= iconv('utf-8', 'windows-1251', $string);
}

и без этого нормально все кушает, или стопудов надо?

[Удален]
#14
root:
и без этого нормально все кушает, или стопудов надо?

Когда гугль сожрал 300 страниц с параметрами вроде "РјСЏРіРєРёС" - пришлось такую конструкцию лепить в код. Причём яндекс с рамой этот же сайт слопали на ура.

Тем более про юзверей забывать не стОит - им тоже может жуткое крокозябрие браузер устроить, так что надо ещё скрипт проверки втыкать, для всяких более геморных ситуаций, чем гуглябот.

root
На сайте с 04.07.2006
Offline
196
#15

saurongorynich, возможно, вопрос больше в настройке сервера... хотя фик его знает, всякое бывает...

root добавил 13.06.2009 в 01:36

Yurecm, тоже была такая проблема, пытался с помощью mod_rewrite сделать ЧПУ, в котором параметры должны были передаваться в некоторых случаях кириллицей, решил вопрос так:

/site/1234/запрос

передается все странице

/site.php?id=1234

а из базы берем, что 1234='запрос'

но так надо прописывать все запросы в базу под опред. ID

в противном случае получается, что мы открываем для индексирования поиск на сайте,

за что можно получить бан.. ну это так, лирика

еще один вариант:

RewriteEngine On

RewriteRule search-(.*) poisk.php?$1 [L]

$_SERVER['QUERY_STRING'] и будет Ваш запрос.

это для php - в коде

$zapros=$_SERVER['QUERY_STRING'];

удачи!

P.S. забыл еще сказать, попробуйте разными кодировками (в первую очередь urlencode -, например, %EC%FF%E3%EA ), думаю, все получится!

Yurecm
На сайте с 25.02.2007
Offline
233
#16

saurongorynich, root, спасибо. Так ничего и не получилось.

Может у кого есть готовый пример, пришлите плиз на мыло ymaldov@yandex.ru

[Удален]
#17
Yurecm:
saurongorynich, root, спасибо. Так ничего и не получилось.
Может у кого есть готовый пример, пришлите плиз на мыло ymaldov@yandex.ru

слушай, дай дамп твоих файлов я тебе приведу все в нормальный вид, ибо на гуще гадать думаю уже не имеет смысла :)

бд не надо, я даже заглядывать туда не собираюсь :))

Yurecm
На сайте с 25.02.2007
Offline
233
#18

bearman, спасибо, мыло в личку отправьте плиз

root
На сайте с 04.07.2006
Offline
196
#19

Yurecm, у меня вот так используется пример, который я написал:

go.php?ya.ru

осуществляется переход на ya.ru , код go.php:

<?

header("Location: http://".$_SERVER['QUERY_STRING']);

exit();

?>

для Вас дописал вначале только , как отмодреврайтить..

уверен, что bearman Вам поможет, читал темы с его участием, спец в этом деле.

bearman, если будет желание, запостите, пожалуйста, результат в блог или в тему, думаю, будет многим полезно!

[Удален]
#20

root, я даже и не знаю о чем именно написать в блог))

тут аналитика такаяя: брауезер все запросы передает в ютф8, если запросы писать ручками, а у тс страничка в сп1251 .. ну и сами понимаете :)) масс иконв да и все хорошо стало сразу. потом поняли что если с сайта нажать кнопку поиск, то очевидно раузер уже знает что запрос идет с сп1251 страницы - переконвертить не надо, добавили просто лишний параметр в хтаккессе и соответственно иф в коде. и .. тс еще н ответил, но думаю что он просто шампанское открывает да наливает там =)))

bearman добавил 19.06.2009 в 01:29

ну и вот

RewriteEngine On
RewriteRule ^s-([^/]*)$ poisk.php?utf=1&text=$1 [L]

кусок хтаккесса, видно параметр ютф=1

if(@$_GET['utf'])
{
$_GET = array_map(create_function('$x', 'return iconv("utf-8","cp1251",$x);'),$_GET);
}

ну и тут ... херня :)

это стандартная проблема перекодировки, если бы тс везде юзал ютф, то проблемы бы не было вообще :))) но у него бд на текстовых файлах, поэтому лишний геморой по конверту кучи файлов и папок ... проще иф вставить имхо)

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий