Вы не зашли.
Собственно переделал движек на UTF-8 но возникла одна проблема при установке системы все таблицы создаются в UTF-8 а
таблица комментариев упорно создается в ср1251.
Уважаемые администраторы или кто знает подскажите пожалуйста в каком файле прописать кодировку что бы по умолчанию таблица комментариев создавалась в UTF-8.
А так в целом вроде все работает нормально только есть слова не вынесенные в ленгфайл.
Не в сети
\engine\install.php
$charset = $charsetEngine?' default charset=utf8':'';
if ($SUPRESS_CHARSET) { $dbCreateString = str_replace('default charset=utf8','',$dbCreateString); }
Не в сети
Нужно ещё в mysql.class.php поправить строчку
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Нашел оказывается после установки основной БД отдельно создается БД для плагинов в файле engine/includes/inc/extrainst.inc.php
там то и была указана кодировка ср1251.
Не в сети
Теперь комментарии не заработали они упорно пытаются добавляться в ср1251. На английском добавляются на русском добавляется пустой комментарий.
Я так понимаю при добавлении русский выводится крякозяблицей, а обработчик честно вычищает все это как недопустимые символы.
Вот застопорился немогу понять где жестко прописать UTF-8.
Не в сети
qwest, интересное начинание...
Вообще я не торопился делать UTF-8 версию по одной причине - перестанет корректно работать масса регулярных выражений.
Начиная от проблем в шаблонах, заканчивая всякими XSS и другими атаками.
В плагине comments - открой файл /engine/plugins/comments/inc/comments.add.php и убери везде вызов функции convert() - именно она из UTF-8 преобразует в Win1251.
Не в сети
Заметил еще одни грабли при публикации новостей на китайском (вот где настоящая проверка UTF-8) URLы выводятся вида: http://ngcms.site/none/-.html
режутся все символы. Что чревато формированием одинаковых URL, я знаю в китайских CMS URLы формируются вида: http://ngcms.site/none/3333.html
т.е. через номер. Пока проверял китайский но грабли будут и с другими языками. Если с кириллицей конструкции вида 'с'='s' сделать не накладно то для иероглифов не подойдет.
'
Не в сети
Убрал вызов функции convert() комментарии стали добавляться но при выводе крякозяблица. Нажимаю обновить страницу в браузере становится все нормально. Если я правильно понял вся беда из за AJAX он обрабатывает все в ср 1251 или нет?. Прошу совета.
Не в сети
qwest, вот с китайским ты словил первый баг - в наименовании альт. имени
Но с генерацией URL'ов всё проще - можно перейти на использование ID новости в URL'е, тогда проблем не будет.
В "управление форматом ссылок" находишь строку "Отображение полной новости" и меняешь в ней {altname} на {zid} - получишь ID с ведущими нулями.
Не в сети
Убрал вызов функции convert() комментарии стали добавляться но при выводе крякозяблица. Нажимаю обновить страницу в браузере становится все нормально. Если я правильно понял вся беда из за AJAX он обрабатывает все в ср 1251 или нет?. Прошу совета.
Наоборот - AJAX работатет только в UTF8 и двиг принудительно делает конвертацию Win1251 => UTF8.
В файле comments.php найди и убери вызов функции iconv()
Не в сети
Подскажите пожалуйста как правильно в файле 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)
Не в сети
Подскажите пожалуйста как правильно в файле 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
Не в сети
Еще вопрос по языковым переменным планируется ли вынести все что не вынесено в языковые файлы.
Да.
И если твой эксперимент окажется удачен, то эта задача станет среди первых.
Не в сети
В спешке третий блок кода написал неправильно он вот такой из за него и заминка что то не выходит у меня правильно убрать в нем iconv()
3.
$output = array(
'status' => 0,
'data' => iconv('Windows-1251', 'UTF-8', $tpl -> show('comments.error'))
);
Не в сети
Я так пробовал но у меня вместо сообщения об ошибке при неправильной отправке комментария выводится надпись "null".
Я подумал что я что то делаю неправильно, значит надо где то дальше искать или всетаки здесь ошибка?
Вроде уже все остальное нормально только с комментами неполучается.
Изменено qwest (2012-04-13 04:45:22)
Не в сети
Нашел еще один баг когда неправильно добавляю новость (без заголовка) выдается ошибка это нормально, но весь текст в текстовых полях становится
крякозябликами.
Я вот подумал может есть желающие посмотреть я файлы выложу.
Немогу победить два бага:
1. Неправильный вывод сообщения об ошибке в комментариях.
2. При добавлении новости без заголовка текст преобразуется в крякозяблицу.
Не в сети
Прошу помочь еще по одной строке правильно убрать 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;
}
Не в сети
$result = array();
foreach ($data as $k => $v){
$result[$k] = $v;
}
return $result;
Стоит вообще удалить function arrayCharsetConvert($direction, $data) { и сделать всё без неё.
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
$result = array(); foreach ($data as $k => $v){ $result[$k] = $v; } return $result;
Стоит вообще удалить function arrayCharsetConvert($direction, $data) { и сделать всё без неё.
Просто удалить?
Не в сети
qwest, Ну не просто))
Для тебя нет смысла её использовать раз у тебя и так всё в utf-8
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети