Здравствуйте, дело в том, что прикаждой установке мне приходиться проделывать следующую процедуру.
1. Я ставлю обычным образом движок, при этом все таблицы в MySQL записываются в кодироке cp1251
2. Далее, чтобы работало все на utf-8 я проделываю следующие процедуры http://eeclub.ru/comments/reshenie_problem_s_kodirovkoj_utf_8/
3. Закачиваю себе дамп базы данный, прохожусь автозаменой с cp1251 на utf-8, закачиваю его обратно.
Как можно избавиться от этих лишних телодвижений?
Как сделать, чтобы установка таблиц в mysql проходила сразу в utf-8?
Да и сообще, чтобы поставить и сразу работать нормально.
Не знаю из-за кодировки или нет, но поймал багу. Если название новости на русском, то при добавлении новость транслитерируется нормально (http://eeclub.ru/comments/transliteraciya_v_url_title_pri_dobavlenii_novostej/ что первый, что второй методы). Если при редактировании удаляю урл, то после сохранения он превращается в бред типа -6 или просто _.
а какие могут быть идеи? “Это не бага, это фитча”! Так получилось, что если url’a нет, то просто подставляет title, который напрямик обрабатывается функцией create_url_title в которой есть вот такой интересный кусочек:
который идет до обработки convert_accented_characters в которой собственно стоит хук foreign_character_conversion_array на котором обычно завязаны расширения конвертирующие урлы в латыницу. И соответственно, если у вас нет корректно настроенный библиотек, то после прохождения данного кусочка у вас будут оставаться только латыница, цифры и пробелы между словами (_ ). Все русский буквы будут заменены на ? и вычищены, т.к. не могут быть частью урла.
Это я как пример действия привел. Проблема на самом деле в том, что при использовании FeedGrabber новости не транслитерируются, а использовать ID в урлах желания нет.
в общем, я нашел причину такого падения - зря грешил на create_url_title. Все дело в... php функции strtolower через которую проходит title перед его переходом в пустой урл. Только вот проблема в том, что не работает функция strtolower корректно с UTF-8 . Для этого есть функция mb_strtolower(если она есть у провайдера). Вот такая бага. И если FeedGrabber использую тут же самую функцию - мы получаем ту же ошибку...
а как он посылает заголовок в базу? Я не смотрел feedgrab, но думаю было бы логично, если бы он посылал напрямую. То есть замена strtolower в нем было бы достаточно. Но если до сих пор не работает, замените mb_strtolower($str) на mb_strtolower($str, ‘UTF-8’) или, если и это не поможет - на mb_strtolower($str, mb_detect_encoding($str))
У меня сейчас нет возможности для проверки и тестов - проверьте с приаттаченным файлом и скажите, что у вас вышло в виде ошибок с пометками:
<<<<<<TITLE!
<<<<<<URL_TITLE!