Проблема следующая - контактная Форма (а в прочим и любая другая на сайте) отправляет данные в кодировке Windows-1252, не смотря на то что сам сайт находится в кодировке Windows-1251 +
1)атрибут у самой формы accept-charset="windows-1251". (клиент) шаблон компонента в кодировке utf-8 без бом.
2)ajax.php на сервере в кодировке UTF-8 без бом.
Код |
---|
<? if (!defined('PUBLIC_AJAX_MODE')) { define('PUBLIC_AJAX_MODE', true); } require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); global $APPLICATION; $APPLICATION->RestartBuffer(); //header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); //$_POST=deepIconv($_POST); $_POST=deepIconv('cp1251', 'utf-8', $_POST);// нормальный пост без иероглифов. print_r($_POST); ?> <?$APPLICATION->IncludeComponent( "mar:iblock.element.add.form", "web_form_modal", array( "COMPOSITE_FRAME_MODE" => "A", "COMPOSITE_FRAME_TYPE" => "AUTO", "CUSTOM_TITLE_DATE_ACTIVE_FROM" => "", "CUSTOM_TITLE_DATE_ACTIVE_TO" => "", "CUSTOM_TITLE_DETAIL_PICTURE" => "", "CUSTOM_TITLE_DETAIL_TEXT" => "", "CUSTOM_TITLE_IBLOCK_SECTION" => "", "CUSTOM_TITLE_NAME" => "Имя", "CUSTOM_TITLE_PREVIEW_PICTURE" => "", "CUSTOM_TITLE_PREVIEW_TEXT" =>"Сообщение", "CUSTOM_TITLE_TAGS" => "", "DEFAULT_INPUT_SIZE" => "30", "DETAIL_TEXT_USE_HTML_EDITOR" => "N", "ELEMENT_ASSOC" => "CREATED_BY", "EMAIL" => "testtesst@list.ru", "GROUPS" => array( 0 => "2", ), "IBLOCK_ID" => "8", "IBLOCK_TYPE" => "web_forms", "LEVEL_LAST" => "Y", "LIST_URL" => "", "MAX_FILE_SIZE" => "0", "MAX_LEVELS" => "100000", "MAX_USER_ENTRIES" => "100000", "POST_TEMPLATE" => "ADD_WEB_FORM", "PREVIEW_TEXT_USE_HTML_EDITOR" => "N", "PROPERTY_CODES" => array( 0 => "19", 1 => "20", 2 => "NAME", ), "PROPERTY_CODES_REQUIRED" => array( 0 => "19", 1 => "NAME", ), "RESIZE_IMAGES" => "N", "SEF_MODE" => "N", "STATUS" => "ANY", "STATUS_NEW" => "N", "USER_CONSENT" => "Y", "USER_CONSENT_ID" => "1", "USER_CONSENT_IS_CHECKED" => "Y", "USER_CONSENT_IS_LOADED" => "Y", "USER_MESSAGE_ADD" => "Заявка отправлена!", "USER_MESSAGE_EDIT" => "Заявка отправлена!", "USE_CAPTCHA" => "N", "COMPONENT_TEMPLATE" => "web_form_modal", ), false );?> <? /* function deepIconv($sbj){ if (is_array($sbj) || is_object($sbj)){ foreach ($sbj as &$val){ $val= deepIconv($from, $to, $val); } return $sbj; }else{ return \Bitrix\Main\Text\Encoding::convertEncodingToCurrent($sbj); } */ function deepIconv($from, $to, $sbj){ if (is_array($sbj) || is_object($sbj)){ foreach ($sbj as &$val){ $val= deepIconv($from, $to, $val); } return $sbj; }else{ return iconv($from, $to, $sbj); } } ?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); ?> |
3)Естественно, при form.serialize() в яваскрипте отправляется в кодировке utf8 (так как аякс работает только с утф8).
Однако сохраняется в инфоблок иероглифами? почему? компонента в кодировке utf-8 без бом.
Сайт сделан на основе 1С Битрикс, редакция старт, работает в кодировке Windows-1251.
код яваскрипт:
Код |
---|
$("#form_modal").submit(function(){ //устанавливаем событие отправки для формы с id=form console.log(isValid($(this))); if (!(isValid($(this)))){ return false; } var data=$("#form_modal").serializeArray(); var form_action = $(this).attr('action'); console.log(data); $.ajax({ type: "POST", url: "/ajax/web_form.php", data: data , timeout: 3000, error: function(request,error) { if (error == "timeout") { alert('timeout'); } else { alert('Error! Please try again!'); } }, success: function(data) { console.log("data"+data); $(".result").html(data.replace(/\s{2,}\r|\n/g, ' ')); //$('#form_modal').attr('action',form_action); } }); return false; }); |