Windows 1251 вместо utf 8

Есть у меня старый сайт на Народ.Ру, и недавно я закинул туда несколько статей — как это я теперь делаю в UTF-8. Кодировка была указана в теге meta, но, взглянув на страницы, я увидел крякозябры: «Р§С‚Рѕ-то случилось.» Оказывается, Народ.Ру шлёт HTTP-заголовок Content-Type: text/html; charset=windows-1251 и это на нём никак не отключается. Пользователь может получить читабельный текст — только если догадается вручную переключить кодировку в браузере.

Что делать? Переходить на другой хостинг? Само собой, но пока руки не дошли, хотелось добиться результата тут. Перекодировать тексты? Более достойным и интересным показалось поставить Javascript-«заплатку».

Способа переключить кодировку из Javascript я не нашёл. Остался вариант перекодировать текст скриптом, запускаемым по событию onready документа.

Итак, браузер получает текст в UTF-8, разбивает UTF-последовательности на группы по 8 бит и трактует их как коды символов в кодировке Windows-1251. Чтобы восстановить читаемость текста, нужно получить эти коды, объединить их в UTF-последовательности, а из них — восстановить Unicode-коды символов и вернуть последние посредством числовых ссылок HTML на символы. В этом деле обнаружились несколько закавык.

Во-первых, считывая текст из свойства innerHTML, мы обнаруживаем на месте неразрывного пробела (0xA0) HTML-сущность « ». Нужно её заменять обратно на 0xA0.

Во-вторых, функция charCodeAt возвращает код символа в Unicode, а не в Windows-1251, значит нужно преобразовывать первый во второй. В-третьих, символа с кодом 0x98 в Windows-1251 нет, так что эта функция возвращает для него undefined, это нужно предусмотреть.

В-четвёртых, Internet Explorer и Safari не позволяют поменять заголовок документа через DOM, только через соответствующее свойство документа — но туда нельзя писать числовые ссылки HTML. Для этого случая можно переводить Unicode-коды в шестнадцатеричную систему счисления, записывать их в виде «%код» и пропускать через функцию unescape.

Итоговый код получается таким:

bindReady(
	function(){

		var Win1251 =
			{
				0x0:	0x0,
				0x1:	0x1,
				0x2:	0x2,
				0x3:	0x3,
				0x4:	0x4,
				0x5:	0x5,
				0x6:	0x6,
				0x7:	0x7,
				0x8:	0x8,
				0x9:	0x9,
				0xA:	0xA,
				0xB:	0xB,
				0xC:	0xC,
				0xD:	0xD,
				0xE:	0xE,
				0xF:	0xF,
				0x10:	0x10,
				0x11:	0x11,
				0x12:	0x12,
				0x13:	0x13,
				0x14:	0x14,
				0x15:	0x15,
				0x16:	0x16,
				0x17:	0x17,
				0x18:	0x18,
				0x19:	0x19,
				0x1A:	0x1A,
				0x1B:	0x1B,
				0x1C:	0x1C,
				0x1D:	0x1D,
				0x1E:	0x1E,
				0x1F:	0x1F,
				0x20:	0x20,
				0x21:	0x21,
				0x22:	0x22,
				0x23:	0x23,
				0x24:	0x24,
				0x25:	0x25,
				0x26:	0x26,
				0x27:	0x27,
				0x28:	0x28,
				0x29:	0x29,
				0x2A:	0x2A,
				0x2B:	0x2B,
				0x2C:	0x2C,
				0x2D:	0x2D,
				0x2E:	0x2E,
				0x2F:	0x2F,
				0x30:	0x30,
				0x31:	0x31,
				0x32:	0x32,
				0x33:	0x33,
				0x34:	0x34,
				0x35:	0x35,
				0x36:	0x36,
				0x37:	0x37,
				0x38:	0x38,
				0x39:	0x39,
				0x3A:	0x3A,
				0x3B:	0x3B,
				0x3C:	0x3C,
				0x3D:	0x3D,
				0x3E:	0x3E,
				0x3F:	0x3F,
				0x40:	0x40,
				0x41:	0x41,
				0x42:	0x42,
				0x43:	0x43,
				0x44:	0x44,
				0x45:	0x45,
				0x46:	0x46,
				0x47:	0x47,
				0x48:	0x48,
				0x49:	0x49,
				0x4A:	0x4A,
				0x4B:	0x4B,
				0x4C:	0x4C,
				0x4D:	0x4D,
				0x4E:	0x4E,
				0x4F:	0x4F,
				0x50:	0x50,
				0x51:	0x51,
				0x52:	0x52,
				0x53:	0x53,
				0x54:	0x54,
				0x55:	0x55,
				0x56:	0x56,
				0x57:	0x57,
				0x58:	0x58,
				0x59:	0x59,
				0x5A:	0x5A,
				0x5B:	0x5B,
				0x5C:	0x5C,
				0x5D:	0x5D,
				0x5E:	0x5E,
				0x5F:	0x5F,
				0x60:	0x60,
				0x61:	0x61,
				0x62:	0x62,
				0x63:	0x63,
				0x64:	0x64,
				0x65:	0x65,
				0x66:	0x66,
				0x67:	0x67,
				0x68:	0x68,
				0x69:	0x69,
				0x6A:	0x6A,
				0x6B:	0x6B,
				0x6C:	0x6C,
				0x6D:	0x6D,
				0x6E:	0x6E,
				0x6F:	0x6F,
				0x70:	0x70,
				0x71:	0x71,
				0x72:	0x72,
				0x73:	0x73,
				0x74:	0x74,
				0x75:	0x75,
				0x76:	0x76,
				0x77:	0x77,
				0x78:	0x78,
				0x79:	0x79,
				0x7A:	0x7A,
				0x7B:	0x7B,
				0x7C:	0x7C,
				0x7D:	0x7D,
				0x7E:	0x7E,
				0x7F:	0x7F,
				0x402:	0x80,
				0x403:	0x81,
				0x201A:	0x82,
				0x453:	0x83,
				0x201E:	0x84,
				0x2026:	0x85,
				0x2020:	0x86,
				0x2021:	0x87,
				0x20AC:	0x88,
				0x2030:	0x89,
				0x409:	0x8A,
				0x2039:	0x8B,
				0x40A:	0x8C,
				0x40C:	0x8D,
				0x40B:	0x8E,
				0x40F:	0x8F,
				0x452:	0x90,
				0x2018:	0x91,
				0x2019:	0x92,
				0x201C:	0x93,
				0x201D:	0x94,
				0x2022:	0x95,
				0x2013:	0x96,
				0x2014:	0x97,
				0x2122:	0x99,
				0x459:	0x9A,
				0x203A:	0x9B,
				0x45A:	0x9C,
				0x45C:	0x9D,
				0x45B:	0x9E,
				0x45F:	0x9F,
				0xA0:	0xA0,
				0x40E:	0xA1,
				0x45E:	0xA2,
				0x408:	0xA3,
				0xA4:	0xA4,
				0x490:	0xA5,
				0xA6:	0xA6,
				0xA7:	0xA7,
				0x401:	0xA8,
				0xA9:	0xA9,
				0x404:	0xAA,
				0xAB:	0xAB,
				0xAC:	0xAC,
				0xAD:	0xAD,
				0xAE:	0xAE,
				0x407:	0xAF,
				0xB0:	0xB0,
				0xB1:	0xB1,
				0x406:	0xB2,
				0x456:	0xB3,
				0x491:	0xB4,
				0xB5:	0xB5,
				0xB6:	0xB6,
				0xB7:	0xB7,
				0x451:	0xB8,
				0x2116:	0xB9,
				0x454:	0xBA,
				0xBB:	0xBB,
				0x458:	0xBC,
				0x405:	0xBD,
				0x455:	0xBE,
				0x457:	0xBF,
				0x410:	0xC0,
				0x411:	0xC1,
				0x412:	0xC2,
				0x413:	0xC3,
				0x414:	0xC4,
				0x415:	0xC5,
				0x416:	0xC6,
				0x417:	0xC7,
				0x418:	0xC8,
				0x419:	0xC9,
				0x41A:	0xCA,
				0x41B:	0xCB,
				0x41C:	0xCC,
				0x41D:	0xCD,
				0x41E:	0xCE,
				0x41F:	0xCF,
				0x420:	0xD0,
				0x421:	0xD1,
				0x422:	0xD2,
				0x423:	0xD3,
				0x424:	0xD4,
				0x425:	0xD5,
				0x426:	0xD6,
				0x427:	0xD7,
				0x428:	0xD8,
				0x429:	0xD9,
				0x42A:	0xDA,
				0x42B:	0xDB,
				0x42C:	0xDC,
				0x42D:	0xDD,
				0x42E:	0xDE,
				0x42F:	0xDF,
				0x430:	0xE0,
				0x431:	0xE1,
				0x432:	0xE2,
				0x433:	0xE3,
				0x434:	0xE4,
				0x435:	0xE5,
				0x436:	0xE6,
				0x437:	0xE7,
				0x438:	0xE8,
				0x439:	0xE9,
				0x43A:	0xEA,
				0x43B:	0xEB,
				0x43C:	0xEC,
				0x43D:	0xED,
				0x43E:	0xEE,
				0x43F:	0xEF,
				0x440:	0xF0,
				0x441:	0xF1,
				0x442:	0xF2,
				0x443:	0xF3,
				0x444:	0xF4,
				0x445:	0xF5,
				0x446:	0xF6,
				0x447:	0xF7,
				0x448:	0xF8,
				0x449:	0xF9,
				0x44A:	0xFA,
				0x44B:	0xFB,
				0x44C:	0xFC,
				0x44D:	0xFD,
				0x44E:	0xFE,
				0x44F:	0xFF
			}

		String.prototype.Win1251_charCodeAt=function(char_num){
			var char_code=this.charCodeAt(char_num);
			return (char_code===undefined)?0x98:Win1251[char_code];
		}

		function utf8_decode(text){
			text=text.replace(/ /g,"\u00A0");
			var char_code, char_code2, char_code3, char_code4;
			var result_str='';
			for(var char_num=0; char_num<text.length; char_num++)
				if((char_code=text.Win1251_charCodeAt(char_num))<0x80 || char_code===text.charCodeAt(char_num))
					result_str+=text.charAt(char_num);//0zzzzzzz - 00000000 00000000 00000000 0zzzzzzz
				else if(char_code>=0xC0)
					if(char_code<0xE0){
						if(
							(char_code2=text.Win1251_charCodeAt(++char_num))>=0x80 &&
							char_code2<0xC0
						)//110yyyyy 10zzzzzz - 00000000 00000000 00000yyy yyzzzzzz
							result_str+="&#"+((char_code-0xC0)*0x40+(char_code2-0x80))+";";
					}
					else if(char_code<0xF0){
						if(
							(char_code2=text.Win1251_charCodeAt(++char_num))>=0x80 &&
							char_code2<0xC0 &&
							(char_code3=text.Win1251_charCodeAt(++char_num))>=0x80 &&
							char_code3<0xC0
						)//1110xxxx 10yyyyyy 10zzzzzz - 00000000 00000000 xxxxyyyy yyzzzzzz
							result_str+="&#"+((char_code-0xE0)*0x1000+(char_code2-0x80)*0x40+(char_code3-0x80))+";";
					}
					else if(
						char_code<0xF8 &&
						(char_code2=text.Win1251_charCodeAt(++char_num))>=0x80 &&
						char_code2<0xC0 &&
						(char_code3=text.Win1251_charCodeAt(++char_num))>=0x80 &&
						char_code3<0xC0 &&
						(char_code4=text.Win1251_charCodeAt(++char_num))>=0x80 && char_code4<0xC0
					)//11110www 10xxxxxx 10yyyyyy 10zzzzzz - 00000000 000wwwxx xxxxyyyy yyzzzzzz
						result_str+="&#"+((char_code-0xF0)*0x40000+(char_code2-0x80)*0x1000+(char_code3-0x80)*0x40+(char_code4-0x80))+";";
		    return result_str;
		}

		function unescapeTitle(title){
			return unescape(
				utf8_decode(document.title).replace(
					/&#([0-9]+);/g,
					function(expression, value){
						if(isNaN(value=parseInt(value, 10)))
							return NaN;
						var i=0, retval="", radix=16;
						while(i++<4 || value>0){
							retval=["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"][value%radix]+retval;	
							value=Math.floor(value/radix);
						}
						return "%u"+retval;
					}
				)
			);
		}

		document.body.innerHTML=utf8_decode(document.body.innerHTML);
		if("vendor" in navigator && navigator.vendor.indexOf("Apple")>-1){
			document.title=unescapeTitle(document.title);
			return;
		}
		/*@cc_on
		document.title=unescapeTitle(document.title);
		return;
		@*/
		document.getElementsByTagName("title")[0].innerHTML=utf8_decode(document.title);
	}
);

Проверено в Firefox 3 и 4; Opera 9, 10 и 11; Internet Explorer 5.5, 6, 7, 8; Google Chrome и Safari последних релизных версий.

Конечно, это кунштюк; я на нём разобрался, что такое UTF-8. По-хорошему, сервер не должен вредить своими HTTP-заголовками. Но тут встаёт философский вопрос: а кому лучше знать кодировку документа — серверу (автору .htaccess) или самому HTML-документу (его автору)? Возможно, у браузеров есть веская причина верить серверу, а не meta-тегу в документе.

На сайте с 22.11.2009

Offline

107

Так у вас сам текст сохранен в кодировке UTF. Покопайтесь в настройках редактора, чтоб он сохранял в 1251

Website CMS: быстрая, удобная, недорогая! Вечная лицензия за 45$ (/ru/forum/524503)
Яся — быстрый поиск фото для товаров. OpenCart/ocStore. Дополнение. (/ru/forum/665287)
Грамотная верстка ваших макетов (/ru/forum/comment/8853216)

На сайте с 10.11.2008

Offline

162

В корне сайта создаём пустой файл ‘.htaccess’ и в него дописываем

AddDefaultCharset UTF-8

На сайте с 17.12.2008

Offline

95

fx1618, откройте в notepad++, вкладка «Кодировки» -> «Преобразовать в ANSI»

4arger добавил 05.07.2010 в 17:50

Mad_Man, ТСу в windows-1251 надо )))

На сайте с 03.09.2007

Offline

65

в хэдерах передается utf-8 . юзайте AddDefaultCharset или еще как-то сервер настраивайте

F1

На сайте с 27.12.2008

Offline

87

AlikZP:
Так у вас сам текст сохранен в кодировке UTF. Покопайтесь в настройках редактора, чтоб он сохранял в 1251

да вроде в windows-1251…

4arger:
fx1618, откройте в notepad++, вкладка «Кодировки» -> «Преобразовать в ANSI»

«Преобразовать в ANSI» не помогает:(

Mad_Man:
В корне сайта создаём пустой файл ‘.htaccess’ и в него дописываем

попробовал только что, тоже не помогло

dvaes:
в хэдерах передается utf-8 . юзайте AddDefaultCharset или еще как-то сервер настраивайте

сервер? а это как?:)

На сайте с 25.02.2008

Offline

64

сервер? а это как?

Это в .htaccess, если в конфиге апача для хоста стоит AllowOverride.

На сайте с 03.09.2007

Offline

65

fx1618:
сервер? а это как?

в панели хостинга поищите, в корне сайта в файде .htaccess впишите AddDefaultCharset windows-1251

L

На сайте с 12.11.2009

Offline

79

Сервер выдает Content-Type: text/html; charset=UTF-8

Настраивайте .htaccess или страницы переделайте в utf-8

F1

На сайте с 27.12.2008

Offline

87

Файла .htaccess не было. Я его создал и вписал туда

AddDefaultCharset windows-1251

Но ничего не изменилось….ё-маё

fx1618 добавил 05.07.2010 в 23:49

мучился, мучился и вот что обнаружил. Когда закачиваю HTML файл на сервер то получается русский текст — абракадабра, а если захожу в панель управления и этот же html код копирую в этот файл (посредством редактировать содержимое файла) то получается нормальный русский текст.

Для наглядности вот примеры:

Вот как выглядит страница если её просто закачать на сервер

Вот так выглядит эта же страника если её потом отредактировать в панели управления.

Наверное получается что во время копирования сервер как то обрабатывает поступающий файл так как ему хочется….да?

На сайте с 10.11.2008

Offline

162

fx1618:
Файла .htaccess не было. Я его создал и вписал туда
AddDefaultCharset windows-1251

Вы AddDefaultCharset UTF-8 пробовали или нет?

Советую все упоминания о windows-1251 заменить на UTF-8. Файлы тоже преобразовать в UTF-8.

Проблема кодировок часто возникает при написании парсеров, чтении данных из xml и CSV файлов. Ниже представлены способы эту проблему решить.

1

windows-1251 в UTF-8

$text = iconv('windows-1251//IGNORE', 'UTF-8//IGNORE', $text);
echo $text;

PHP

$text = mb_convert_encoding($text, 'UTF-8', 'windows-1251');
echo $text;

PHP

2

UTF-8 в windows-1251

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text);
echo $text;

PHP

$text = mb_convert_encoding($text, 'windows-1251', 'utf-8');
echo $text;

PHP

3

Когда ни что не помогает

$text = iconv('utf-8//IGNORE', 'cp1252//IGNORE', $text);
$text = iconv('cp1251//IGNORE', 'utf-8//IGNORE', $text);
echo $text;

PHP

Иногда доходит до бреда, но работает:

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text);
$text = iconv('windows-1251//IGNORE', 'utf-8//IGNORE', $text);
echo $text;

PHP

4

File_get_contents / CURL

Бывают случаи когда file_get_contents() или CURL возвращают иероглифы (Алмазные борÑ) – причина тут не в кодировке, а в отсутствии BOM-метки.

$text = file_get_contents('https://example.com');
$text = "\xEF\xBB\xBF" .  $text;
echo $text;

PHP

Ещё бывают случаи, когда file_get_contents() возвращает текст в виде:

�mw�Ƒ0�����&IkAI��f��j4/{�</�&�h�� ��({�񌝷o�����:/��<g���g��(�=�9�Paɭ

Это сжатый текст в GZIP, т.к. функция не отправляет правильные заголовки. Решение проблемы через CURL:

function getcontents($url){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	$output = curl_exec($ch);
	curl_close($ch);
	return $output;
}

echo getcontents('https://example.com');

PHP

12.01.2017, обновлено 02.11.2021

Другие публикации

Отправка e-mail в кодировке UTF-8 с вложенными файлами и возможные проблемы.

JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и…

Описание значений глобального массива $_SERVER с примерами.

Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и…

В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры…

Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.

В последнее время, в процессе работы, я все меньше и меньше встречаю сайты, которые находятся в некогда популярной кодировке «Windows-1251», приоритетно используемой на русскоязычных ресурсах.

Если верить «Wikipedia» («Википедия» — свободная энциклопедия), на начало апреля 2019 года лишь на 1% всех веб-страниц используется эта кодировка.

Скрывать не буду, я в числе тех, кто так же не использует ее в своих проекта, и вот почему:

  1. Разные проблемы в процессе работы кода.
  2. Лишние действия при работе с кодом в текстовых редакторах.
  3. Отсутствие поддержки многих языков.
  4. Наличие ошибок в верстке сайта при его проверке через validator.w3.org.

Чтобы избежать этих (и не только) неприятных моментов, сегодня в этой статье я подробно расскажу вам, как перевести сайт под управлением CMS 1C-Bitrix из кодировки «Windows-1251» в «UTF-8».

1. Конвертацию (смену кодировки) в CMS 1C-Bitrix мы начнем с самого главного – создания полного бэкапа сайта (его файлов и базы данных).

2. Далее попросите поддержку хостинга установить для сайта следующие директивы:

mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2

Можно попробовать внести изменения и самостоятельно одним из следующих способов.

2.1. Первый вариант – для тех, кто использует хостинг Beget.

2.1.1. Авторизуйтесь в панели управления хостингом.

2.1.2. Перейдите в раздел «Сайты».

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

2.1.3. На открывшейся странице, напротив настраиваемого сайта нажмите на иконку «PHP N», где N – используемая версия PHP на вашем сайте.

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

2.1.4. В открывшейся форме либо вручную добавьте директивы:

mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2

подобно этому:

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

либо в блоке «Применить оптимальные настройки для CMS:» выберите «Bitrix UTF-8» и сохраните изменение нажатием на кнопку «Применить».

2.2. Второй вариант – через конфигурационный файл php.ini. О том, как узнать адрес его местоположения на вашем хостинге, написано в этой нашей статье.

В нем вам необходимо найти и раскомментировать строки (удалить перед ними ;) содержащие «mbstring.internal_encoding» и «mbstring.func_overload», после чего значения выставить на «UTF-8» и «2» соответственно, чтобы получилась следующая картина:

mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2

2.3. Третий вариант – через файл .htaccess, который находится в корневой папке сайта.

Если вы используете стандартный файл .htaccess и версия PHP на хостинге до 5.4, то найдите блок, похожий на:

<IfModule mod_php5.c>
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
</IfModule>

И добавьте (или раскомментируйте, если такие строки уже есть, удалив перед ними #) следующие строки:

php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2

Если вы используете стандартный файл .htaccess и версия PHP на хостинге 7+, то найдите блок, похожий на:

<IfModule mod_php5.c>
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
</IfModule>

и замените его на:

<IfModule mod_php7.c>
	php_flag session.use_trans_sid off
	php_value mbstring.internal_encoding UTF-8
	php_value mbstring.func_overload 2
</IfModule>

Во всех остальных случаях попробуйте просто прописать следующие строки в самый верх этого же файла:

php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2

2.4. Четвертый вариант – через изменение настроек Apache (httpd.conf) – главный файл конфигурации хостинга/сервера. Его расположение может быть по разным путям, распространенные – это папки /usr/local/etc/apache/ и /etc/httpd/conf/. Более точную информацию на этот счет уточняйте у поддержки хостинга.

В нем для нужного виртуального хостинга (сайта) в блок «VirtualHost» вставьте следующие директивы:

php_admin_value mbstring.internal_encoding UTF-8
php_admin_value mbstring.func_overload 2

3. Авторизуйтесь в панели управления сайтом.

4. Перейдите в раздел «Настройки» – «Настройки продукта» – «Модули».

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

На открывшейся странице удалите модули (если они используются на вашем сайте) «Поиск» (без сохранения таблиц) и «Веб-Аналитика» (без сохранения таблиц, но с сохранением шаблонов сообщений).

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

5. Если на вашем сайте установлен модуль «Форум», вам необходимо удалить букву «ё» из словаря транслита. Для этого в левом меню перейдите по пути «Сервисы» – «Форумы» – «Фильтр нецензурных слов» – «Словарь транслита», найдите и удалите букву из списка.

6. Далее переходите в «Настройки» — «Настройки продукта» – «Языковые параметры» – «Региональные настройки».

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

7. На открывшейся странице находите «ru» в столбце «Название» и щелкаете по нему один раз левой кнопкой мыши.

8. На открывшейся странице, в графе «Кодировка» пишите:

UTF-8

После чего сохраняете изменения нажатием на соответствующую кнопку.

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

После сохранения у вас (в административной части сайта и на самом сайте) могут появиться знаки вопроса – не пугайтесь, на данном этапе это нормальное явление.

9. Далее подключитесь к вашему сайту по FTP.

10. В папке /bitrix/php_interface/ найдите и откройте файл dbconn.php, после чего сразу после <? добавьте:

define('BX_UTF', true);

Сохраните изменения и отправьте файл обратно на сайт.

11. В папке /bitrix/ найдите и откройте файл .settings.php. В нем блок:

'utf_mode' => 
array (
  'value' => false,
  'readonly' => true,
),

замените на:

'utf_mode' => array(
	'value' => true,
	'readonly' => true,
),

Сохраните изменения и отправьте файл обратно на сайт.

12. Скачайте архив в конце статьи, разархивируйте и содержимое (файл convert_utf8.php) загрузите по FTP в корень вашего сайта.

13. Перейдите на вашем сайте (через браузер) к файлу по пути /convert_utf8.php, после чего на открывшейся странице (если в предыдущих шагах нет никаких ошибок) у вас появится страница следующего вида:

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

13.1. Здесь вы жмете на «Проверка прав доступа» и ждете результата проверки. Если все хорошо (в противном случае будет предложен список файлов, которые запрещены для записи), появится страница следующего вида:

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

Жмете на «Конвертация файлов в UTF8».

13.2. После того, как процесс конвертации файлов завершиться успехом, вы увидите следующую картину:

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

Здесь вы жмете на «Конвертация базы данных в UTF8», и если вдруг вас перекинет на ваш сайт с формой входа – авторизовываетесь, введя данные от профиля администратора, после чего вас перекинет обратно на страницу выше, где вы вновь нажимаете «Конвертация базы данных в UTF8».

Процесс конвертации базы данных не быстрый, так что запаситесь терпением. По завершении появится сообщение следующего характера:

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

14. Возвращаетесь в FTP и удаляете из корневой папки сайта ранее загруженный файл convert_utf8.php.

15. Здесь же (в FTP) откройте файл after_connect.php в папке /bitrix/php_interface/ и строку:

$DB->Query("SET NAMES 'cp1251'");

замените на:

$DB->Query("SET NAMES 'utf8'");
$DB->Query('SET collation_connection = "utf8_unicode_ci"');

Сохраните изменения и отправьте файл обратно на сайт.

16. В этой же папке откройте файл after_connect_d7.php и строку:

$connection->queryExecute("SET NAMES 'cp1251'");

замените на:

$connection->queryExecute("SET NAMES 'utf8'");
$connection->queryExecute('SET collation_connection = "utf8_unicode_ci"'); 

Сохраните изменения и здесь и отправьте файл обратно на сайт.

17. Очистите весь кэш сайта.

18. Выйдите из панели управления сайтом, после чего авторизуйтесь вновь.

19. Установите удаленные из 4 шага модули. Для поиска сделайте переиндексацию (в левом меню «Настройки» – «Поиск» – «Переиндексация» и на открывшейся странице – «Переиндексировать»).

Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8

При большом количестве материалов на сайте этот процесс так же не быстрый, поэтому окончания придется подождать некоторое время.

20. Еще раз очистите весь кэш сайта.

21. Дополнительно: если вы используете интеграцию с почтой, в разделе «Сервисы» – «Почта» – «Почтовые ящики», в каждом почтовом ящике во вкладке «Дополнительные настройки», в графе «Кодировка, в которую конвертировать входящую почту», выставьте «(использовать кодировку сайта)».

Вот, собственно, и все. Инструкция тестировалась на 1C-Bitrix версии 18.0.

Остались вопросы? Задать их можете в комментариях под данной статьей.

Реализация DI в PHP

Jason-Webb 13.05.2025

Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .

Обработка изображений в реальном времени на C# с OpenCV

stackOverflow 13.05.2025

Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .

POCO, ACE, Loki и другие продвинутые C++ библиотеки

NullReferenced 13.05.2025

В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .

Паттерны проектирования GoF на C#

UnmanagedCoder 13.05.2025

Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .

Создаем CLI приложение на Python с Prompt Toolkit

py-thonny 13.05.2025

Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .

Конвейеры ETL с Apache Airflow и Python

AI_Generated 13.05.2025

ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .

Выполнение асинхронных задач в Python с asyncio

py-thonny 12.05.2025

Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .

Работа с gRPC сервисами на C#

UnmanagedCoder 12.05.2025

gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .

CQRS (Command Query Responsibility Segregation) на Java

Javaican 12.05.2025

CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций. . .

Шаблоны и приёмы реализации DDD на C#

stackOverflow 12.05.2025

Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто. . .

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как отключить защитник windows server 2019
  • В какой папке хранятся файлы журналов ос windows по умолчанию
  • Activator windows 7 rutracker
  • Windows event forwarding это
  • Run python as windows service