Проблема следующая - контактная Форма (а в прочим и любая другая на сайте) отправляет данные в кодировке 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;
});
|