Автор Тема: Кодировка в сообщениях от пользователя  (Прочитано 1461 раз)

10 Май 2013, 19:27:42
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день! Столкнулась с одним непонятным моментом:

Страница:   Личный кабинет -> История заказов
Если ввести сообщение через  форму "Добавить сообщение" , то оно отображается в другой кодировке:

%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435 %u043E%u0442 %u043A%u043B%u0438%u0435%u043D%u0442%u0430

И в админке в Customer Service это сообщение тоже отображается неправильно.

Подскажите, пожалуйста, как это исправить?

Да, версия 1.5.3.1
10 Май 2013, 20:36:00
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 941
  • Репутация: +10/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Кодировка браузера, кодировка в базе данных и кодировка сайта должны быть utf.
10 Май 2013, 21:08:15
Ответ #2
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да везде кодировка utf-8. Все страницы отображаются правильно! Неверно ТОЛЬКО САМО СООБЩЕНИЕ!

Может подскажете в какую таблицу записываются эти комментарии?
10 Май 2013, 21:18:36
Ответ #3
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нашла таблицу - ps_customer_messaqe.
В эту же таблицу попадают сообщения, отправленные со страницы "Контакты" - у них кодировка правильная.

Проблема с каким-то файлом?
10 Май 2013, 21:53:12
Ответ #4
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
11 Май 2013, 17:37:16
Ответ #5
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22318
  • Репутация: +17114/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Кодировка браузера, кодировка в базе данных и кодировка сайта должны быть utf.
Кодировка в браузере какая?
Про кодировку бд уже писали.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
12 Май 2013, 01:51:05
Ответ #6
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В базе кодировка utf-8. Прилагаю скрин на команду SHOW GLOBAL VARIABLES;
Второй скрин - таблица customer_message.
Сайтостроитель я, конечно, начинающий... но мое инженерное чутье говорит, что дело не в базе. Если в одном и том же поле таблицы присутствуют разные кодировки, то дело в данных? Вернее в том, откуда они пишутся в базу.

В order_details.tpl  меняла htmlall на html - безрезультатно

Это не может быть "виноват"  JavaScript?

Кодировка браузерОВ тоже utf-8
12 Май 2013, 13:21:01
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 33071
  • Репутация: +26762/-0
    • Просмотр профиля
В теме по умолчанию javascript скрывает/показывает div с формой. Если не менялась тема, то проблема не в этом.
Вот все файлы которые нужно проверять:
1. Обработка формы котнролер  OrderDetailController.php.
2. В нем класс Mail и метод Send.
3. Плюс шаблоны писем. Открывать в редакторе и сохранять в utf8.

Если сообщение придет с формы контактов, будет точно такое-же ?
12 Май 2013, 13:37:30
Ответ #8
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105596
  • Репутация: +39548/-0
    • Просмотр профиля
    • Webstudio UwK
Цитата: coder
Если сообщение придет с формы контактов, будет точно такое-же ?
Цитата: Purplelady
В эту же таблицу попадают сообщения, отправленные со страницы "Контакты" - у них кодировка правильная.
Cоздание интернет сайтов Webstudio UwK
12 Май 2013, 13:43:23
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105596
  • Репутация: +39548/-0
    • Просмотр профиля
    • Webstudio UwK
Цитировать
Вот все файлы которые нужно проверять:
1. Обработка формы котнролер  OrderDetailController.php.
2. В нем класс Mail и метод Send.
3. Плюс шаблоны писем. Открывать в редакторе и сохранять в utf8.
Забыли шаблон страницы личного кабинета - order-detail.tpl
В нем переменная
{$message.message|escape:'htmlall':'UTF-8'|nl2br}попробуйте поменять на
{$message.message|escape:'html':'UTF-8'|nl2br}или
{$message.message}И проверьте как показывает сообщение в кабинете пользователя.
Cоздание интернет сайтов Webstudio UwK
12 Май 2013, 23:23:33
Ответ #10
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
К сожалению, мой воз и ныне там  :-[
Файлы order-detail.tpl,  OrderDetailController.php и шаблон письма пересохранила в utf-8. Не помогло!
К order-detail.tpl я применила контекстную замену: ВСЕ htmlall заменила на html.  Не помогло!

1. Обработка формы котнролер  OrderDetailController.php.
2. В нем класс Mail и метод Send.
3. Плюс шаблоны писем. Открывать в редакторе и сохранять в utf8.

Заглянула в контроллер  OrderDetailController.php. В нем описан только один класс OrderDetailControllerCore
В методе postProcess()  определяется  переменная   
$msgText = Tools::getValue('msgText'); - и в ней уже сидит абракадабра.

Ребят, по-моему собака порылась все-таки там, где это несчастное сообщение отправляется в базу...

Что еще можно попробовать?
13 Май 2013, 10:12:12
Ответ #11
  • Фрилансер
  • *
  • Сообщений: 147
  • Репутация: +0/-0
    • Просмотр профиля
По моему, если у этих сообщений разные только страницы отправки, а остальное все одинаковое, значит проблема находиться на - Странице:   Личный кабинет -> История заказов. Метод исключений никто не отменял.
13 Май 2013, 14:53:19
Ответ #12
  • Новичок
  • *
  • Сообщений: 20
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
По моему, если у этих сообщений разные только страницы отправки

Я посмотрела отличия в отправке формы из личного кабинета(абракадабра):
<form action="{$link->getPageLink('order-detail', true)}" method="post" class="std" id="sendOrderMessage">
и со страницы  контактов(тут все правильно):
<form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std" enctype="multipart/form-data">
Как говорится, две большие разницы  :-\
В общем,  уберу я нафиг эту форму из личного кабинета и не буду морочить голову ни себе, ни людям.

Всем спасибо.
15 Май 2013, 10:26:04
Ответ #13
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102479
  • Репутация: +34219/-0
    • Просмотр профиля
Разница только в
enctype="multipart/form-data"Обычно устанавливать значение атрибута enctype не требуется, данные вполне правильно понимаются на стороне сервера. Однако если используется поле для отправки файла (input type="file"), следует определить атрибут enctype как multipart/form-data.
Синтаксис
<form enctype="application/x-www-form-urlencoded | multipart/form-data | text/plain">
...
</form>
Значения
application/x-www-form-urlencoded
Вместо пробелов ставится +, символы вроде русских букв кодируются их шестнадцатеричными значениями (например, %D0%90%D0%BD%D1%8F).
multipart/form-data
Данные не кодируются. Это значение применяется при отправке файлов.
text/plain
Пробелы заменяются знаком +, буквы и другие символы не кодируются.

01 Июль 2013, 16:49:27
Ответ #14
  • Новичок
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
если у вас преста 1.5.3.1 то замените www/themes/default/js/history.js  на этот, все заработает  ;)
*/

//show the order-details with ajax
function showOrder(mode, var_content, file)
{
$.get(
file,
((mode == 1) ? {'id_order': var_content, 'ajax': true} : {'id_order_return': var_content, 'ajax': true}),
function(data)
{
$('#block-order-detail').fadeOut('slow', function()
{
$(this).html(data);
/* if return is allowed*/
if ($('div#order-detail-content table td.order_cb').length > 0)
{
//return slip : check or uncheck every checkboxes
$('form div#order-detail-content th input[type=checkbox]').click(function()
{
$('form div#order-detail-content td input[type=checkbox]').each(function()
{
this.checked = $('form div#order-detail-content th input[type=checkbox]').is(':checked');
updateOrderLineDisplay(this);
});
});
//return slip : enable or disable 'global' quantity editing
$('form div#order-detail-content td input[type=checkbox]').click(function()
{
updateOrderLineDisplay(this);
});
//return slip : limit quantities
$('form div#order-detail-content td input.order_qte_input').keyup(function()
{
var maxQuantity = parseInt($(this).parent().find('span.order_qte_span').text());
var quantity = parseInt($(this).val());
if (isNaN($(this).val()) && $(this).val() != '')
{
$(this).val(maxQuantity);
}
else
{
if (quantity > maxQuantity)
$(this).val(maxQuantity);
else if (quantity < 1)
$(this).val(1);
}
});
}
//catch the submit event of sendOrderMessage form
$('form#sendOrderMessage').submit(function(){
return sendOrderMessage();
});
$(this).fadeIn('slow', function() {
$.scrollTo(this, 1200);
resizeAddressesBox();
});
});
});
}

function updateOrderLineDisplay(domCheckbox)
{
var lineQuantitySpan = $(domCheckbox).parent().parent().find('span.order_qte_span');
var lineQuantityInput = $(domCheckbox).parent().parent().find('input.order_qte_input');
if($(domCheckbox).is(':checked'))
{
lineQuantitySpan.hide();
lineQuantityInput.show();
}
else
{
lineQuantityInput.hide();
lineQuantityInput.val(lineQuantitySpan.text());
lineQuantitySpan.show();
}
}

//send a message in relation to the order with ajax
function sendOrderMessage()
{
paramString = "ajax=true";
$('form#sendOrderMessage').find('input, textarea').each(function(){
paramString += '&' + $(this).attr('name') + '=' + encodeURI($(this).val());
});

$.ajax({
type: "POST",
url: $('form#sendOrderMessage').attr("action"),
data: paramString,
success: function (msg){
$('#block-order-detail').fadeOut('slow', function() {
$(this).html(msg);
//catch the submit event of sendOrderMessage form
$('form#sendOrderMessage').submit(function(){
return sendOrderMessage();
});
$(this).fadeIn('slow');
});
}
});
return false;
}