|
С каждой новой версией браузера от Microsoft мир веб-разработчиков напрягается - чего они там еще нового придумали? Пользователи-новаторы радостно перескакивают на новые версии, пользователи-консерваторы довольствуются тем, что есть. Статистика используемых браузеров начинает колебаться, а за кулисами происходит настоящая борьба за приличный вид страниц. Потому что каждый новый Internet Explorer показывает один и тот же код страницы по разному, и не всегда так, чтобы можно было закрывать на это глаза.
В браузерах, живущих "по понятиям" - то есть поддерживающих стандарты наиболее полным образом, "проблема обновления" практически отсутствует - их механизм отрисовки страницы изначально максимально соответствует стандартам и новая версия предлагает в первую очередь новые удобства пользования браузером, а не нововведения в плане отображения страницы. Так происходит с Mozilla Firefox, с Opera и многими другими браузерами. Страница, сверстанная по стандартам, отображается в них коректно. Отрадно, что недавно появившийся Google Chrome продолжает эту традицию и головных болей верстальщикам почти не добавил.
Для браузеров, не придерживающихся стандартов (я в первую очередь имею в виду старый и недобрый IE), существует целый арсенал хаков, позволяющих обойти некорректное отображение кода сайта. Не буду их здесь перечислять - информацию по ним можно найти во многих местах в интернете.
Одним из таких хаков является условное включение в страницу HTML-кода, действующего только для IE старых версий - 6й и ниже:
<!--[if lte IE 6]>
<link rel="stylesheet" type="text/css" href="/css/ie6.css" media="screen" />
.....
<![endif]-->
Это замечательное решение, которое используется массой людей, в том числе и мной. Однако существует ситуация, в которой оно не срабатывает:
Если у вас, как и у многих добропорядочных верстальщиков, на рабочем компьютере основной версией IE, которая установлена в системе, является Internet Explorer 7, и для полного счастья установлен набор старых версий IE под названием Multiple IEs, то при попытке посмотреть страницу через IE 6 из этого набора описанный выше хак не сработает. Из-за того, что в проверке условия будет фигурировать основная (системная) версия Internet Explorer, то есть "семерка", а не та, которая указывается в User-Agent. Чтобы обойти это ограничение, в процессе отладки кода страницы для IE 6 и меньше придется ставить в код такое условие:
<!--[if lte IE 7]>
При этом необходимо помнить о том, что такую страницу не следует смотреть в IE 7 из-за того, что код будет срабатывать и для него
После того, как код будет отлажен, возвращаем в условие шестерку, удостоверяемся в корректном отображении в IE 7 и остальных браузерах - и смело выкладываем код на сайт.
|
|
|
С некоторых пор я использую в своих разработках очень хороший и функциональный WYSIWYG-редактор Spaw. Он требует минимум времени на настройку, но при этом поволяет множество замечательных функций. Пожалуй, самая ценная из которых - это возможность быстрой закачки изображений (и любых других файлов) на сайт для последующей вставки в редактируемый текст. И что особенно приятно, этот редактор прекрасно русифицирован.
Однако есть небольшой подводный камень, на который обязательно найдет коса разработчиков, которые используют этот редактор для русскоязычных сайтов, да еще и с кодировкой UTF-8. Конечно, кодировка прекрасно выставляется в настройках Spaw, и проблем с отображением, редактированием русских символов нет. Однако при закачке файла, названного русскими символами, Spaw проверяет лишь его расширение на соответствие разрешенным типам файлов, но само имя файла так и остается состоящим из русских символов. И очень вероятно, что нормально его скачать потом не удастся, хотя добавить в текст - пожалуйста.
В такой ситуации полезно просто транслитерировать имя закачиваемого файла, чтобы избежать проблем. Как это сделать? Легко:
открываем файл spaw/plugins/spawfm/class/spawfm.class.php
и добавляем в класс SpawFm следующую функцию:
function transliterateFilename($input, $mode=1)
{
$trans=array(
' ' => '_',
'А' => 'A',
'Б' => 'B',
'В' => 'V',
'Г' => 'G',
'Д' => 'D',
'Е' => 'E',
'Ё' => 'YO',
'Ж' => 'ZH',
'З' => 'Z',
'И' => 'I',
'Й' => 'J',
'К' => 'K',
'Л' => 'L',
'М' => 'M',
'Н' => 'N',
'О' => 'O',
'П' => 'P',
'Р' => 'R',
'С' => 'S',
'Т' => 'T',
'У' => 'U',
'Ф' => 'F',
'Х' => 'H',
'Ц' => 'TS',
'Ч' => 'CH',
'Ш' => 'SH',
'Щ' => 'SCH',
'Ъ' => '',
'Ы' => 'Y',
'Ь' => '',
'Э' => 'E',
'Ю' => 'YU',
'Я' => 'YA',
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'д' => 'd',
'е' => 'e',
'ё' => 'yo',
'ж' => 'zh',
'з' => 'z',
'и' => 'i',
'й' => 'j',
'к' => 'k',
'л' => 'l',
'м' => 'm',
'н' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ф' => 'f',
'х' => 'h',
'ц' => 'ts',
'ч' => 'ch',
'ш' => 'sh',
'щ' => 'sch',
'ъ' => '',
'ы' => 'y',
'ь' => '',
'э' => 'e',
'ю' => 'yu',
'я' => 'ya',
'№' => 'No.',
//ukranian symbols added
'Ї' => 'I',
'І' => 'I',
'Є' => 'E',
'ї' => 'i',
'і' => 'i',
'є' => 'e',
);
$input=strtr($input, $trans);
if($mode==1) //lowercase mode
{
return utf8_strtolower($input, 'utf-8');
}
return $input;
}function%20transliterateFilename%28%24input%2C%20%24mode%3D1%29%0D%0A%7B%0D%0A%24trans%3Darray%28%0D%0A%26nbsp%3B%20%26nbsp%3B%27%20%27%20%3D%3E%20%27_%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C0%27%20%3D%3E%20%27A%27%2C%20%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C1%27%20%3D%3E%20%27B%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C2%27%20%3D%3E%20%27V%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C3%27%20%3D%3E%20%27G%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C4%27%20%3D%3E%20%27D%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C5%27%20%3D%3E%20%27E%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%A8%27%20%3D%3E%20%27YO%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C6%27%20%3D%3E%20%27ZH%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C7%27%20%3D%3E%20%27Z%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C8%27%20%3D%3E%20%27I%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%C9%27%20%3D%3E%20%27J%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%CA%27%20%3D%3E%20%27K%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%CB%27%20%3D%3E%20%27L%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%CC%27%20%3D%3E%20%27M%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%CD%27%20%3D%3E%20%27N%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%CE%27%20%3D%3E%20%27O%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%CF%27%20%3D%3E%20%27P%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D0%27%20%3D%3E%20%27R%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D1%27%20%3D%3E%20%27S%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D2%27%20%3D%3E%20%27T%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D3%27%20%3D%3E%20%27U%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D4%27%20%3D%3E%20%27F%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D5%27%20%3D%3E%20%27H%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D6%27%20%3D%3E%20%27TS%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D7%27%20%3D%3E%20%27CH%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D8%27%20%3D%3E%20%27SH%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%D9%27%20%3D%3E%20%27SCH%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%DA%27%20%3D%3E%20%27%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%DB%27%20%3D%3E%20%27Y%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%DC%27%20%3D%3E%20%27%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%DD%27%20%3D%3E%20%27E%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%DE%27%20%3D%3E%20%27YU%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%DF%27%20%3D%3E%20%27YA%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E0%27%20%3D%3E%20%27a%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E1%27%20%3D%3E%20%27b%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E2%27%20%3D%3E%20%27v%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E3%27%20%3D%3E%20%27g%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E4%27%20%3D%3E%20%27d%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E5%27%20%3D%3E%20%27e%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%B8%27%20%3D%3E%20%27yo%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E6%27%20%3D%3E%20%27zh%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E7%27%20%3D%3E%20%27z%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E8%27%20%3D%3E%20%27i%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%E9%27%20%3D%3E%20%27j%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%EA%27%20%3D%3E%20%27k%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%EB%27%20%3D%3E%20%27l%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%EC%27%20%3D%3E%20%27m%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%ED%27%20%3D%3E%20%27n%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%EE%27%20%3D%3E%20%27o%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%EF%27%20%3D%3E%20%27p%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F0%27%20%3D%3E%20%27r%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F1%27%20%3D%3E%20%27s%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F2%27%20%3D%3E%20%27t%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F3%27%20%3D%3E%20%27u%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F4%27%20%3D%3E%20%27f%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F5%27%20%3D%3E%20%27h%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F6%27%20%3D%3E%20%27ts%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F7%27%20%3D%3E%20%27ch%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F8%27%20%3D%3E%20%27sh%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%F9%27%20%3D%3E%20%27sch%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%FA%27%20%3D%3E%20%27%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%FB%27%20%3D%3E%20%27y%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%FC%27%20%3D%3E%20%27%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%FD%27%20%3D%3E%20%27e%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%FE%27%20%3D%3E%20%27yu%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%FF%27%20%3D%3E%20%27ya%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%B9%27%20%3D%3E%20%27No.%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%2F%2Fukranian%20symbols%20added%0D%0A%26nbsp%3B%20%26nbsp%3B%27%AF%27%20%3D%3E%20%27I%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%B2%27%20%3D%3E%20%27I%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%AA%27%20%3D%3E%20%27E%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%BF%27%20%3D%3E%20%27i%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%B3%27%20%3D%3E%20%27i%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%27%BA%27%20%3D%3E%20%27e%27%2C%0D%0A%26nbsp%3B%20%26nbsp%3B%29%3B%0D%0A%24input%3Dstrtr%28%24input%2C%20%24trans%29%3B%0D%0Aif%28%24mode%3D%3D1%29%20%2F%2Flowercase%20mode%0D%0A%7B%0D%0A%26nbsp%3B%20%26nbsp%3Breturn%20utf8_strtolower%28%24input%2C%20%27utf-8%27%29%3B%0D%0A%7D%0D%0Areturn%20%24input%3B%0D%0A%7D%0D%0A
после чего находим строку
$uplfile_name = $uplfile['name']; %24uplfile_name%20%3D%20%24uplfile%5B%27name%27%5D%3B%0D%0A
и заменяем ее на эти строки
$uplfile_name = $this->transliterateFilename($uplfile['name'],0);
$transliterated_name = $uplfile_name; %24uplfile_name%20%3D%20%24this-%3EtransliterateFilename%28%24uplfile%5B%27name%27%5D%2C0%29%3B%0D%0A%24transliterated_name%20%3D%20%24uplfile_name%3B%20%0D%0A
Нуль, передаваемый последним параметром, означает, что конверсия в нижний регистр не требуется. Если передать не ноль - имя файла будет преобразовано в нижний регистр. $translierated_name сохраняем для того, чтобы использовать для
автоматического переименования файла, если такой файл уже существует на
сервере.
Чтобы автопереименование использовало транслитерированный вариант, необходимо найти строку
$uplfile_name = ereg_replace('(.*)(\.[a-zA-Z]+)$', '\1_'.$i.'\2', $uplfile['name']);%24uplfile_name%20%3D%20ereg_replace%28%27%28.%2A%29%28%5C.%5Ba-zA-Z%5D%2B%29%24%27%2C%20%27%5C1_%27.%24i.%27%5C2%27%2C%20%24uplfile%5B%27name%27%5D%29%3B%0D%0A
и заменить ее на
$uplfile_name = ereg_replace('(.*)(\.[a-zA-Z]+)$', '\1_'.$i.'\2', $transliterated_name);%24uplfile_name%20%3D%20ereg_replace%28%27%28.%2A%29%28%5C.%5Ba-zA-Z%5D%2B%29%24%27%2C%20%27%5C1_%27.%24i.%27%5C2%27%2C%20%24transliterated_name%29%3B%0D%0A
Естественно, в массив $trans можно передавать любые правила конверсии, которые вам будут угодны. Как нетрудно заметить в приведенном коде, лично я добавил, кроме транслитерации, перевод пробелов в символы подчеркивания, а также символы украинского алфавита, которых нет в русском. Так что украинские девелоперы также могут использовать этот код ;)
|
|
|
Отключение транслитерации
Все управление транслитерацией ссылок находится в libs\utils.php. Кроме него, есть еще правила переадресации в .htaccess, но до него мы доберемся чуть позже.
За транслитерацию отвечают вызовы transliterate_for_urls() в функциях makeCategoryFriendly() и makeUrlFriendly() (транслитерация названий рубрик и заголовков соответственно)
Отключение транслитерации названий рубрик:
Закомментируйте следующую строку в функции makeCategoryFriendly():
$input=transliterate_for_urls($input,1);
Отключение транслитерации заголовков:
Закомментируйте следующую строку в функции makeUrlFriendly():
$output=transliterate_for_urls($output,0);
Изменение правил транслитерации
Прежде всего, настройка регистра при транслитерации: вторым параметром в функцию transliterate_for_urls() передается настройка регистра - если вы хотите, чтобы заголовки транслитерировались в нижнем регистре, точно так же, как для рубрик, то в функции makeUrlFriendly() нужно поменять второй параметр на 1. Ее вызов будет выглядеть так:
$output=transliterate_for_urls($output,1);
Естественно, если вы отключили транслитерацию, смена регистра не будет происходить. Но в этом случае вы можете просто добавить следующую строку после закомментированной строки вызова transliterate_for_urls():
$output = utf8_strtolower($output, 'utf-8');
и название рубрики или заголовок будут переводиться в нижний регистр. Если вы БОЛЬШОЙ оригинал, можете вместо utf8_strtolower() использовать utf8_strtoupper(), но я надеюсь, что вы до этого не дойдете :)
Если вы хотите, чтобы пробелы или любые другие символы заменялись на отличные от тех, что стоят по умолчанию, измените правила замены в соответствующих функциях (как вы уже поняли, задавать правила формирования адресов для названий рубрик и заголовков нужно отдельно - в функциях makeCategoryFriendly() и makeUrlFriendly() соответственно). Правила замены находятся в строках подобного вида:
$output = preg_replace("/\s/e" , "_" , $output); // это замена пробелов на подчеркивания
$output = str_replace("?", "", $output); //это удаление (замена на пустую строку) знаков вопроса
Изменения в .htaccess
Как известно, при использовании "дружественных" URL при каждом добавлении новых рубрик в .htaccess необходимо изменять строки, находящиеся в самом конце секции перенаправления. Код для этих строк показывается в самом низу страницы управления рубриками. При использовании транслитерированных названий рубрик его можно смело брать и вставлять в свой .htaccess Если же вы пользуетесь нетраслитерированными названиями рубрик, то возможна ситуация, когда вы этот код вставили, а при переходе по URL-encoded адресу с русскими буквами вы получаете ошибку 404. Я решил эту проблему заменой URL-encoded представлений рубрик на обычный русскоязычный текст. То есть вместо строк вида
RewriteRule ^(all|%D0%98%D0%BD%D1%82.........)/([^/]+)/?$ story.php?title=$2 [L]
я использовал такие конструкции:
RewriteRule ^(all|Интернет|pligg|МояЧудеснаяРубрика)/([^/]+)/?$ story.php?title=$2 [L]
Ту же самую операцию я сделал для второй перенаправляющей строки - и после этого дружественные адреса заработали корректно. Очень важно вписывать названия рубрик в таком виде, в котором они показываются в ссылках - важен регистр и наличие/отсутствие пробелов.
И напоследок - не забудьте проводить редактирование .htaccess в режиме UTF-8!
Надеюсь, эта статья поможет вам разобраться с ссылками в русском Pligg. Если остались еще какие-то вопросы - можете их задавать в комментариях.
|
|
|
Не так давно мне поступило несколько жалоб на то, что после установки моей сборки Pligg 9.90 появлялась ошибка при обращении к базе данных, характерной чертой которой был вывод строки "There is a problem with the categories table. Error CA:001".
К сожалению, я долго не мог воспроизвести у себя эту ошибку, но сегодня, сделав резервную копию своего рабочего сайта на локальном компьютере и попытавшись ее запустить, я обнаружил эту ошибку и у себя.
Что я сделал, чтобы избавиться от нее?
Во первых, убедился, что в базе данных есть таблица pligg_categories и в ней есть корректные данные - присутствуют все рубрики (категории), включая категорию all.
Во вторых проверил настройки в файле settings.php, чтобы они соответствовали тому, что находится в БД:
$dblang = 'ru';
define('table_prefix', 'pligg_');
Данные оказались верны, но ошибка все равно наблюдалась. После этого осталось заключить, что причина кроется в кэшировании результатов запросов к БД.
После того, как я очистил кэш (у Pligg есть два кэша - один для БД, другой для отображаемых данных, они находятся в каталогах cache и teplates_c соответственно), все заработало нормально.
Однако, если вы очистите кэш и при этом у вас будут стоять неверные установки в settings.php, очистка кэша не даст результата. Поэтому обязательно проверьте эти установки.
Если вы вносите изменения в работу системы, не забывайте очищать кэш - это избавит вас от подобных проблем. Можно также отключить кэш на время подобных работ, изменив в options.php строку
define('caching', 1);
на
define('caching', 0);
|
|
|
Для апгрейда необходимы - установленная система Pligg 9.90 Beta английской версии (естественно!) и PHPMyAdmin, настроенный на работу с базой данных вашей системы Pligg. Через него мы будем осуществлять насилие над
базой данных ;)
Первым делом сделайте резервную копию БД и файлов. Мало ли что, нужно иметь возможность для отката. Также может быть полезным записать на лист бумаги настройки системы, которые вы изменяли - в процессе русификации все настройки, кроме настроек сервера, будут сброшены на значения по умолчанию (это будут полностью рабочие значения, поэтому работа вашей системы не будет повреждена). В английской версии будет сложно переписать текстовые значения, например, в группе настроек рекомендаций (Recommend), так как они отображаются в админке в неверной кодировке. Но тут уж ничего не поделаешь, зато после установки русской версии вы сможете легко их задать заново, если значения по умолчанию вас чем-то не устроят)
Простота перехода зависит от того, в каком виде хранятся данные в вашей БД. Существует хак, позволяющий использовать русский язык в Pligg, известный еще со времен Pligg RSE и я надеюсь, что вы им воспользовались перед тем, как ваша система наполнялась данными. Я веду речь о хаке для установки кодировки UTF8 при общении системы с БД, заключающемся в добавлении в libs/db.php этих четырех строк:
mysql_query("SET NAMES utf8_general_ci");
mysql_query("SET CHARSET utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
в район 100й строки libs/db.php прямо перед строками
return $return_val;
}
/**********************************************************************
* Try to select a mySQL database
*/
Если вы использовали этот хак с самого начала использования английской версии, то вы избежали массы проблем. Если не использовали - сливайте дамп к себе, перекодируйте данные в дампе в кодировку UTF8 и заливайте на место старых. После этого применяйте хак, указанный выше. Если хак работает и данные корректно отображаются на сайте (а заодно они корректно отображаются и в PHPMyAdmin), вы готовы для апгрейда . Если нет - значит, вы неправильно перекодировали данные. Перекодируйте данные правильно и залейте в БД.
|
|
|