Криво работает sef_urls на windows-1251
Выдалась минутка заняться галереей, обнаружил, что база создалась непонятно как, хотя в том году в это время хотел интегрировать галерею к вордпресу и была нужна UTF-8, но из-за крякозябр сгноил базу с более чем 10000 описанных фоток, установил все с нуля в надежде, что все будет правильно, но инсталер кривой, и создавал бог весть, что пришлось всякие файлы править интегрировать из-за этого не получилось я перекипел. (Кривой на примере товоже вордпреса, ставится, быстра и делает таблицы в нужном формате без всякого геморроя). Вернусь к проблеме, которую я обнаружил, она собственно изложена в заголовке топика, а выглядит так:
Когда была UTF-8 хоть и кривая sef_urls работал и не было не каких ошибок, при переходе по ключевым фразам в
http://www.tatu.announcements.ru/search.php
Сейчас же при нажатии на ключевую фразу:
http://www.tatu.announcements.ru/thumbnails-search-черный.html
вылазет вот такая ошибка:
Результаты поиска - "черный"
Ради эксперимента потратив часов 20 конвертировав таблицу в базе, но не чего не помогло.
При этом запрос можно отправить типа, если бы sef_urls не стоял:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=черный
Ошибок в виде крякозябр при этом нет
Результаты поиска - "черный"
Могу предположить, что sef_urls как-то неправильно формирует запрос в адресной строке и его надо немного подкрутить, но как я не знаю, помогите мне, пожалуйста.
(https://coppermine-gallery.com/forum/proxy.php?request=http%3A%2F%2Fwww.tatu.announcements.ru%2Falbums%2Fuserpics%2F10001%2Fthumb_00001.jpg&hash=4480a247071df8e029cc6ec5044387cb034cd678)
Духи мне шепчут, то я должен своим несчастьем с Рунету. :'(
Нужно понимать, как работает браузер вообще, и как работает sef_urls.
Когда Вы в браузере открывает ссылку:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=черный
Браузер СРАЗУ передаёт в PHP слово "черный" и уже там русские буквы обрабатываются.
А уже потом в браузер возвращается слово преобразованное и ссылка выглядит как:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=%D1%87%D0%B5%D1%80%D0%BD%D1%8B%D0%B9
Если Вы попытаетесь изначально открыть ссылку:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=%D1%87%D0%B5%D1%80%D0%BD%D1%8B%D0%B9
то ничего не получите :)
Это грубо говорю...
---------------------
А когда Вы открываете:
http://www.tatu.announcements.ru/thumbnails-search-черный.html
То получается, что на каком-то этапе слово черный обрабатывается в UTF-8, а потом обработанный результат передаётся обратно в Windows-1251 и получается вот это "черный".
"черный" - это и есть "черный" в UTF-8.
Если Вы откроете ссылку ниже, то всё будет работать.
http://www.tatu.announcements.ru/thumbnails-search-%F7%E5%F0%ED%FB%E9.html
Мне кажется, что Вы там уже столько намутили с пересохранением файлов в разных кодировках, что сами запутались и нас путаете ???
Я обновил архив SEF_URLs plugin for cpg1.4.x до версии Version 1.44
http://forum.coppermine-gallery.net/index.php/topic,46718.msg276140.html#msg276140
Переустановил плагин, но при нажатии на
http://www.tatu.announcements.ru/search-thumbnails-черный.html
Результаты поиска - "черный"
При этом все нормально работает, если просто вести слово в строке запроса поиска:
Результаты поиска - "черный"
Также все нормально отображается, если запрос идет вида:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=черный
кстати этот запрос не работает с кодировкой UTF-8 на той же
http://www.art-apple.ru/thumbnails.php?album=search&search=черный
Результаты поиска - "������"
Но если нажимать на русские слова, которые есть на
http://www.art-apple.ru/search.php
Все работает:
http://www.art-apple.ru/thumbnails.php?album=search&search=черная
Результаты поиска - "черная" но стоит обновить запрос и снова все
Результаты поиска - "������"
Я вижу решение в данной ситуации в следующем отключить запросы вида:
http://www.tatu.announcements.ru/search-thumbnails-детское.html
Пускай они будут как без sef_urls
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=детское
Последнее не так критично, но возник вопрос как правильно это сделать? С налету это не прокатило.
Уверен, то убрав обработку данного запроса скрипт станет более универсален, так как будет меньше зависеть от кодировок или последнему надо как-то явным образом иметь возможность указывать способ обращения к базе, все из-за той же путанице в кодировке.
Жалко будет отключать скрипт если не найду приемлемого выхода из данной ситуации. (https://coppermine-gallery.com/forum/proxy.php?request=http%3A%2F%2Fparty.redpage.ru%3A8080%2Fim%2Fsmlnew%2F36_1_38.gif&hash=9a486b9eec82eafd91bf9f50ed35ca7a586dc940)
Можно попробовать перекодировать урл так:
$new_url = iconv('utf-8', 'windows-1251', rawurldecode($url));
т.е. нужно найти где впервые обрабатывается урл вида:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=детское
и перекодировать его
Вот тут это делается:
http://forum.coppermine-gallery.net/index.php/topic,56873.0.html
$CURRENT_PIC_DATA['keywords'] = всё ключевые слова для объекта
Quote from: Makc666 on December 02, 2008, 12:51:02 PM
Вот тут это делается:
http://forum.coppermine-gallery.net/index.php/topic,56873.0.html
$CURRENT_PIC_DATA['keywords'] = всё ключевые слова для объекта
Makc666, всё равно выдаёт в utf-8
Quote from: ULISS on December 17, 2008, 10:39:04 PM
Makc666, всё равно выдаёт в utf-8
Открой:
displayimage.phpНайди кусок кода:
if ($CURRENT_PIC_DATA['keywords'] != "") {
$info[$lang_picinfo['Keywords']] = '<span class="alblink">' . preg_replace("/(\S+)/", "<a href=\"thumbnails.php?album=search&search=\\1\">\\1</a>" , $CURRENT_PIC_DATA['keywords']) . '</span>';
}
Замени на:
if ($CURRENT_PIC_DATA['keywords'] != "") {
// $info[$lang_picinfo['Keywords']] = '<span class="alblink">' . preg_replace("/(\S+)/", "<a href=\"thumbnails.php?album=sear
ch&search=\\1\">\\1</a>" , $CURRENT_PIC_DATA['keywords']) . '</span>';
$keywords_arr = preg_split("/[\s,]+/",$CURRENT_PIC_DATA['keywords']);
foreach ($keywords_arr AS $key=>$value){
$info[$lang_picinfo['Keywords']] .= '<span class="alblink"><a href="thumbnails.php?album=search&search=' . urlencode
($keywords_arr[$key]) . '">' . $keywords_arr[$key] . '</a></span> ';
}
}
У меня нет под рукой галереи в Windows-1251, поэтому мне тяжело тестить :(
Жду ответа...
Нажимаю на фотку, пусто...
У меня тот самый сложный случай когда мне пришлось в config.inc.php
Задать кодировку т.к. с переездом на другой хостинг возникли проблемы...
$CONFIG['dbcharset'] = 'cp1251';
Quote from: ULISS on December 18, 2008, 09:11:34 PM
Нажимаю на фотку, пусто...
Плохо, что пусто.
Нужно мне или права у тебя давать, если галерея видна в инет, чтобы я мог файло править.
Или мне ставить у себя подобную схему.
Второне наверное проще, но... Нужно время.
Кстати, в 1.5.x обещают родную поддержку sef_urls.
Сам пока не видел.
Makc666, а может можно, скачать архив cpg135_pictures с названиями фотографий и его каким-то образом перекодировать в cp1251...?
Т.к. хотел добавить к фоткам выведенным на первую страницу с помощью (copperminefetch) названия фотографий и они тоже крокозяблами отображаются... :-(
Покапайтесь в этой теме (http://forum.coppermine-gallery.net/index.php/topic,24323.0.html), там описано несколько рецептов как делается перекодировка.
Makc666, у меня VPS
база с нуля создаётся
character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection utf8_unicode_ci
collation_database cp1251_general_ci
collation_server cp1251_general_ci
и ничего придумать не могу, как конвертировать с помощью WinSCP то есть шел сделать, не понимаю.
Ещё раз можно для юзера. :-[
Quote from: ULISS on January 12, 2009, 11:20:22 PM
Makc666, у меня VPS
база с нуля создаётся
character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection utf8_unicode_ci
collation_database cp1251_general_ci
collation_server cp1251_general_ci
и ничего придумать не могу, как конвертировать с помощью WinSCP то есть шел сделать, не понимаю.
Ещё раз можно для юзера. :-[
А как база создаётся, кнопкой?
Доступ к phpmyadmin есть?
Можно несколько баз создавать, т.е. создать пустую базу?
Quote from: Makc666 on January 13, 2009, 07:37:48 PM
А как база создаётся, кнопкой?
Доступ к phpmyadmin есть?
Можно несколько баз создавать, т.е. создать пустую базу?
База создаётся из ISPmanager, но пробовал из phpmyadmin тоже.
Доступ к phpmyadmin естественно есть, баз можно создать неограниченное колличество т.к. VPS.
Quote from: ULISS on January 13, 2009, 09:37:22 PM
База создаётся из ISPmanager, но пробовал из phpmyadmin тоже.
Доступ к phpmyadmin естественно есть, баз можно создать неограниченное колличество т.к. VPS.
Так. Понятно.
А теперь с нуля, по шагам, опиши свою проблему заново, потому что тема начинается про одно, а заканчивается другим.
Я честно уже запутался, что ты хочешь, для чего, зачем, как и т.п.
Quote from: Makc666 on January 15, 2009, 03:47:20 PM
Так. Понятно.
А теперь с нуля, по шагам, опиши свою проблему заново, потому что тема начинается про одно, а заканчивается другим.
Я честно уже запутался, что ты хочешь, для чего, зачем, как и т.п.
Проблема в следующем.
Ключевые русские слова отображаются абракадаброй по клику, да и вся база если убрать патч.
}
if (!mysql_select_db($CONFIG['dbname']))
return false;
+ if ($CONFIG['dbcharset']) {
+ mysql_query("SET NAMES '$CONFIG[dbcharset]'",$result);
+ }
return $result;
}
А вообще, хотелось бы конвертнуть базу в cp1251 чтоб не было никаких траблов и не изобретать велосипед. :P