Криво работает sef_urls на windows-1251 Криво работает sef_urls на windows-1251
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Криво работает sef_urls на windows-1251

Started by RedPage, November 18, 2008, 10:54:39 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

RedPage

Криво работает 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)
Духи мне шепчут, то я должен своим несчастьем с Рунету. :'(


Makc666

#1
Нужно понимать, как работает браузер вообще, и как работает 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

RedPage

Переустановил плагин, но при нажатии на

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=черная
Результаты поиска - "черная" но стоит обновить запрос и снова все
Результаты поиска - "������"

RedPage

Я вижу решение в данной ситуации в следующем отключить запросы вида:

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)

Alex Revo

Можно попробовать перекодировать урл так:

$new_url = iconv('utf-8', 'windows-1251', rawurldecode($url));

т.е. нужно найти где впервые обрабатывается урл вида:
http://www.tatu.announcements.ru/thumbnails.php?album=search&search=детское
и перекодировать его

Makc666

Вот тут это делается:
http://forum.coppermine-gallery.net/index.php/topic,56873.0.html


$CURRENT_PIC_DATA['keywords'] = всё ключевые слова для объекта

ULISS

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


Makc666

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&amp;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&amp;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&amp;search=' . urlencode
($keywords_arr[$key]) . '">' . $keywords_arr[$key] . '</a></span>&nbsp;';                                                           
        }                                                                                                                           
    }


У меня нет под рукой галереи в Windows-1251, поэтому мне тяжело тестить :(

Жду ответа...

ULISS


ULISS

У меня тот самый сложный случай когда мне пришлось в config.inc.php
Задать кодировку т.к. с переездом на другой хостинг возникли проблемы...

$CONFIG['dbcharset'] =                       'cp1251';

Makc666

Quote from: ULISS on December 18, 2008, 09:11:34 PM
Нажимаю на фотку, пусто...
Плохо, что пусто.
Нужно мне или права у тебя давать, если галерея видна в инет, чтобы я мог файло править.
Или мне ставить у себя подобную схему.

Второне наверное проще, но... Нужно время.

Кстати, в 1.5.x обещают родную поддержку sef_urls.
Сам пока не видел.

ULISS

Makc666, а может можно, скачать архив cpg135_pictures с названиями фотографий и его каким-то образом перекодировать в cp1251...?
Т.к. хотел добавить к фоткам выведенным на первую страницу с помощью (copperminefetch) названия фотографий и они тоже крокозяблами отображаются... :-(

Alex Revo

Покапайтесь в этой теме, там описано несколько рецептов как делается перекодировка.

ULISS

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 то есть шел сделать, не понимаю.
Ещё раз можно для юзера. :-[

Makc666

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 есть?
Можно несколько баз создавать, т.е. создать пустую базу?

ULISS

Quote from: Makc666 on January 13, 2009, 07:37:48 PM
А как база создаётся, кнопкой?
Доступ к phpmyadmin есть?
Можно несколько баз создавать, т.е. создать пустую базу?


База создаётся из ISPmanager, но пробовал из phpmyadmin тоже.
Доступ к phpmyadmin естественно есть, баз можно создать неограниченное колличество т.к. VPS.

Makc666

Quote from: ULISS on January 13, 2009, 09:37:22 PM
База создаётся из ISPmanager, но пробовал из phpmyadmin тоже.
Доступ к phpmyadmin естественно есть, баз можно создать неограниченное колличество т.к. VPS.
Так. Понятно.

А теперь с нуля, по шагам, опиши свою проблему заново, потому что тема начинается про одно, а заканчивается другим.
Я честно уже запутался, что ты хочешь, для чего, зачем, как и т.п.

ULISS

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