Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2012-04-11 04:56:42

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Собственно переделал движек на UTF-8 но возникла одна проблема при установке системы все таблицы создаются в UTF-8 а
таблица комментариев упорно создается в ср1251.
Уважаемые администраторы или кто знает подскажите пожалуйста в каком файле прописать кодировку что бы по умолчанию таблица комментариев создавалась в UTF-8.
А так в целом вроде все работает нормально только есть слова не вынесенные в ленгфайл.

Не в сети

#2 2012-04-11 13:04:32

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

\engine\install.php

$charset = $charsetEngine?' default charset=utf8':'';


if ($SUPRESS_CHARSET) { $dbCreateString = str_replace('default charset=utf8','',$dbCreateString); }

Не в сети

#3 2012-04-11 22:15:11

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

В обоих строках стоит utf8 но одна таблица комментариев упорно создается в utf8. Немогу найти где прописано.

Не в сети

#4 2012-04-11 22:43:18

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Нужно ещё в mysql.class.php поправить строчку

Не в сети

#5 2012-04-11 22:45:17

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Нашел оказывается после установки основной БД отдельно создается БД для плагинов в файле engine/includes/inc/extrainst.inc.php
там то и была указана кодировка ср1251.

Не в сети

#6 2012-04-11 23:47:49

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Теперь комментарии не заработали они упорно пытаются добавляться в ср1251. На английском добавляются на русском добавляется пустой комментарий.
Я так понимаю при добавлении русский выводится крякозяблицей, а обработчик честно вычищает все это как недопустимые символы.
Вот застопорился немогу понять где жестко прописать UTF-8.

Не в сети

#7 2012-04-12 00:48:41

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest, интересное начинание...
Вообще я не торопился делать UTF-8 версию по одной причине - перестанет корректно работать масса регулярных выражений.
Начиная от проблем в шаблонах, заканчивая всякими XSS и другими атаками.

В плагине comments - открой файл /engine/plugins/comments/inc/comments.add.php и убери везде вызов функции convert() - именно она из UTF-8 преобразует в Win1251.

Не в сети

#8 2012-04-12 01:15:10

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Заметил еще одни грабли при публикации новостей на китайском (вот где настоящая проверка UTF-8) URLы выводятся вида:  http://ngcms.site/none/-.html
режутся все символы. Что чревато формированием одинаковых URL, я знаю в китайских CMS URLы формируются вида: http://ngcms.site/none/3333.html
т.е. через номер. Пока проверял китайский но грабли будут и с другими языками. Если с кириллицей конструкции вида 'с'='s' сделать не накладно то для иероглифов не подойдет.
'

Не в сети

#9 2012-04-12 01:36:55

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Убрал вызов функции convert() комментарии стали добавляться но при выводе крякозяблица. Нажимаю обновить страницу в браузере становится все нормально. Если я правильно понял вся беда из за AJAX он обрабатывает все в ср 1251 или нет?. Прошу совета.

Не в сети

#10 2012-04-12 01:46:21

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest, вот с китайским ты словил первый баг - в наименовании альт. имени smile
Но с генерацией URL'ов всё проще - можно перейти на использование ID новости в URL'е, тогда проблем не будет.

В "управление форматом ссылок" находишь строку "Отображение полной новости" и меняешь в ней {altname} на {zid} - получишь ID с ведущими нулями.

Не в сети

#11 2012-04-12 01:47:32

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest пишет:

Убрал вызов функции convert() комментарии стали добавляться но при выводе крякозяблица. Нажимаю обновить страницу в браузере становится все нормально. Если я правильно понял вся беда из за AJAX он обрабатывает все в ср 1251 или нет?. Прошу совета.

Наоборот - AJAX работатет только в UTF8 и двиг принудительно делает конвертацию Win1251 => UTF8.
В файле comments.php найди и убери вызов функции iconv()

Не в сети

#12 2012-04-12 23:37:41

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Подскажите пожалуйста как правильно в файле comments.php убрать вызов функции iconv()

1.

		$output = array(
			'status'	=> 1,
			'rev'		=> intval(pluginGetVariable('comments', 'backorder')),
			'data'		=> iconv('Windows-1251', 'UTF-8', comments_show($SQLnews['id'], $commentId, $SQLnews['com']+1, $callingCommentsParams))
		);

2.

if ($_REQUEST['ajax']) {
		$output['data'] = iconv('Windows-1251', 'UTF-8', $output['data']);
		$template['vars']['mainblock'] = json_encode($output);

3.

		$output = array(
			'status'	=> 1,
			'rev'		=> intval(pluginGetVariable('comments', 'backorder')),
			'data'		=> iconv('Windows-1251', 'UTF-8', comments_show($SQLnews['id'], $commentId, $SQLnews['com']+1, $callingCommentsParams))
		);

У меня небольшая заминка возникает при выводе сообщения об ошибке вот пытаюсь понять из за чего или я неправильно убираю iconv() или из за того что файл tpl в ср1251

Изменено qwest (2012-04-13 00:53:05)

Не в сети

#13 2012-04-13 00:59:39

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Еще вопрос по языковым переменным планируется ли вынести все что не вынесено в языковые файлы.

Не в сети

#14 2012-04-13 01:11:51

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest пишет:

Подскажите пожалуйста как правильно в файле comments.php убрать вызов функции iconv()

1.

		$output = array(
			'status'	=> 1,
			'rev'		=> intval(pluginGetVariable('comments', 'backorder')),
			'data'		=> comments_show($SQLnews['id'], $commentId, $SQLnews['com']+1, $callingCommentsParams)
		);

2.

if ($_REQUEST['ajax']) {
		$output['data'] = $output['data'];
		$template['vars']['mainblock'] = json_encode($output);

3.

		$output = array(
			'status'	=> 1,
			'rev'		=> intval(pluginGetVariable('comments', 'backorder')),
			'data'		=> comments_show($SQLnews['id'], $commentId, $SQLnews['com']+1, $callingCommentsParams)
		);

У меня небольшая заминка возникает при выводе сообщения об ошибке вот пытаюсь понять из за чего или я неправильно убираю iconv() или из за того что файл tpl в ср1251

Не в сети

#15 2012-04-13 01:12:38

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest пишет:

Еще вопрос по языковым переменным планируется ли вынести все что не вынесено в языковые файлы.

Да.
И если твой эксперимент окажется удачен, то эта задача станет среди первых.

Не в сети

#16 2012-04-13 02:08:56

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

В спешке третий блок кода написал неправильно он вот такой из за него и заминка что то не выходит у меня правильно убрать в нем iconv()


3.

$output = array(
				'status' => 0,
				'data' => iconv('Windows-1251', 'UTF-8', $tpl -> show('comments.error'))
			);

Не в сети

#17 2012-04-13 03:17:15

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest, тебе надо убрать iconv('Windows-1251', 'UTF-8', и в конце )

Не в сети

#18 2012-04-13 04:42:47

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Я так пробовал но у меня вместо сообщения об ошибке при неправильной отправке комментария выводится надпись "null". 
Я подумал что я что то делаю неправильно, значит надо где то дальше искать или всетаки здесь ошибка?
Вроде уже все остальное нормально только с комментами неполучается.

Изменено qwest (2012-04-13 04:45:22)

Не в сети

#19 2012-04-13 22:31:40

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Нашел еще один баг когда неправильно добавляю новость (без заголовка) выдается ошибка это нормально, но весь текст в текстовых полях становится
крякозябликами.
Я вот подумал может есть желающие посмотреть я файлы выложу.
Немогу победить два бага:
1. Неправильный вывод сообщения об ошибке в комментариях.
2. При добавлении новости без заголовка текст преобразуется в крякозяблицу.

Не в сети

#20 2012-04-14 07:48:20

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Прошу помочь еще по одной строке правильно убрать iconv()

1.

	$result = array();
	foreach ($data as $k => $v) {
		$result[iconv($direction?'UTF-8':'Windows-1251', $direction?'Windows-1251':'UTF-8', $k)] = is_array($v)?arrayCharsetConvert($direction, $v):iconv($direction?'UTF-8':'Windows-1251', $direction?'Windows-1251':'UTF-8', $v);
	}
	return $result;
}

Не в сети

#21 2012-06-14 23:27:02

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Ответ на вопрос в посте #20 актуален.

Не в сети

#22 2012-06-15 08:43:55

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

$result = array();
foreach ($data as $k => $v){
	$result[$k] = $v;
}
return $result;

Стоит вообще удалить function arrayCharsetConvert($direction, $data) { и сделать всё без неё.

Не в сети

#23 2012-06-17 13:34:10

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

ROZARD пишет:
$result = array();
foreach ($data as $k => $v){
	$result[$k] = $v;
}
return $result;

Стоит вообще удалить function arrayCharsetConvert($direction, $data) { и сделать всё без неё.

Просто удалить?

Не в сети

#24 2012-06-17 14:24:26

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

qwest, Ну не просто))
Для тебя нет смысла её использовать раз у тебя и так всё в utf-8

Не в сети

#25 2012-10-22 22:06:59

qwest
Участник
Зарегистрирован: 2010-07-03
Сообщений: 96
Рейтинг :   
Сайт

Re: Переделал NGCMS в кодировке UTF-8 но есть небольшие проблемы.

Версия UTF-8 может кому нужна:     ngcms.zip

Качаем тестим отписываемся.

Не в сети

Подвал раздела

Работает на FluxBB