Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с кодировками скрипта (https://javascript.ru/forum/events/35530-problema-s-kodirovkami-skripta.html)

Zim_one 13.02.2013 20:29

Проблема с кодировками скрипта
 
Здравствуйте, появилась большая (для меня) проблема. При подключении на сторонний сайт яваскрипта (<script src="путь на страницу моего сайта"></script>) он работает не коректно. Проблема в том что мой сайт написан на ютф8, а сайт где отображаетса скрипт в другой кодировке, так как в скрипте есть русские слова то они не отображаются коректно и следовательно скрипт не рабочий (в скрипте присутсвует функция replace которая меняет одно слово на другое...). Подскажите пожалуйста как узнать кодировку сайта на котором должен работать скрипт? Или может можно какимто образом прописать русское слово в нескольких кодировках каждое отдельно? (вариант спросить кодировку сайта у владельца не подходить, нужно автоматом это делать)
Зарание благодарен, прошу простить за ошибки в тексте, у нас не учать русский:).

Deff 13.02.2013 20:35

cкрипты обычно хранятся в UTF <script src="путь на страницу моего сайта"></script>
Cкорее всего это Вы исходник скрипта сохранили в Ansi
Cохраняйте скрипт через блокнот в UTF-8 на компутере, потом только подгружайте на сайт

Zim_one 15.02.2013 00:41

Проблема не в этом, у меня яваскрипт в ютф8. Но если сторонний сайт (который не на ютф8) подключит мой скриптовый файл (который на ютф8) то он не будет корректно работать. Как с этим справится?

Deff 15.02.2013 00:42

Zim_one,
странно - где ваш скрипт - я его выведу тут (Тут
Файл скрипта с контентом
alert("Привет!")

dmitriymar 15.02.2013 00:56

Цитата:

Сообщение от Zim_one
Проблема не в этом, у меня яваскрипт в ютф8. Но если сторонний сайт (который не на ютф8) подключит мой скриптовый файл (который на ютф8) то он не будет корректно работать. Как с этим справится?

стандарт говорит в какой кодировке тексты скриптов обрабатываются там их не 10 и даже не 2-а одна однозначная. "пресечение" кодов символов в различных кодировках дело другое. не придумывайте отсебятину.
http://tanalin.com/blog/2007/07/external-file-encoding/ и гуглом научитесь пользоваться.

danik.js 15.02.2013 00:57

http://www.w3schools.com/tags/att_script_charset.asp

Zim_one 15.02.2013 00:57

function addlinks(){
das = /автомобиль/ig;
	ast2 = document.body.innerHTML.replace(das,\'<a href=\"#\" $code_class style=\"$code_color $code_shrift $code_size $code_width $code_textdecoration\" onmouseover=\"qwe();\" onmouseout=\"ewq();\">автомобиль</a>\');
	document.body.innerHTML=ast2;
}
	
	var abc = document.createElement(\'div\');
	abc.id=\"asd\";
	abc.innerHTML = \"<center>\"+banerorimage000111+\"</center>\";
	abc.style.position=\"absolute\";
	abc.style.left=\"-1000000px\";
	abc.style.width=\"100%\";
	abc.style.height=\"\";
	abc.style.backgroundColor=\"\";
	abc.onmouseover=qwe1;
	abc.onmouseout=ewq;
	document.body.appendChild(abc);
}



function qwe(){
	document.getElementById(\'asd\').style.left=\"0px\";
	if(mouseY>400){
		document.getElementById(\'asd\').style.top=mouseY - 300 + \"px\";
	}
	else{
		document.getElementById(\'asd\').style.top=mouseY + 200 + \"px\";
	}
	 aqwe = 1;
}
function ewq(){
	setTimeout(function(){
		if(aqwe !== 1){
			document.getElementById(\'asd\').style.left=\"-1000000px\";
		}
	}, 2000);
		 aqwe = 0;
}

function qwe1(){
	aqwe=1;
}

function mouseEventqwe(eqwe){
	eqwe = window.event || eqwe;
	mouseY=eqwe.clientY + (document.documentElement && document.documentElement.scrollTop || document.body && document.body.scrollTop || 0);
}
if(addEventListener){
	window.addEventListener(\"mousemove\",mouseEventqwe,false);
        window.addEventListener(\"load\",addlinks,false);
}
else{
	window.attachEvent(\"mousemove\",mouseEventqwe);
        window.attachEvent(\"load\",addlinks);
}


там много слешей, некогда щас удалять и возможно еще пхп отрывки кода(нужно бежать). сам скрипт рабочий 100%, но вот ключевое слово "автомобиль" которое должно сменится ссылкой на чужом сайте(не ютф8) будет крокозяброй. Я щяс подумал передавать это слово через ГЕТ параметр в код, вместо вытягивания из БД, может сработает.

dmitriymar 15.02.2013 01:05

Цитата:

Сообщение от Zim_one
Я щяс подумал передавать это слово через ГЕТ параметр в код, вместо вытягивания из БД, может сработает.
Ответить с цитированием

нет не сработает -будет попытка перевести в кодировку страницы.
Цитата:

Сообщение от Zim_one
подключит мой скриптовый файл (который на ютф8) то он не будет корректно работать

не путайте работу скрипта и отображение браузером-это вещи разные

Deff 15.02.2013 01:15

javascript.ru в кодировке windows-1251

Загружаю UTF-8
<!DOCTYPE HTML>
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<script type="text/javascript" src="http://hostjs-mybb2011.narod.ru/js/asdsa.js?5"></script>
</head>
  <body>

  </body>
</html>

dmitriymar 15.02.2013 01:22

Цитата:

Сообщение от Deff
avascript.ru в кодировке windows-1251

Загружаю UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript" src="http://hostjs-mybb2011.narod.ru/js/asdsa.js"></script>

вывод в страницу, а не в алерт. да и есть частичное пересечение. в сообщение все буквы русского алфавита

danik.js 15.02.2013 01:48

Цитата:

Сообщение от Deff
Загружаю UTF-8

не вижу в упор UTF-8

Deff 15.02.2013 01:54

Цитата:

Сообщение от danik.js
не вижу в упор UTF-8

Открой в браузере ссылку http://hostjs-mybb2011.narod.ru/js/asdsa.js
сохрани на рабочий стол - открой в блокноте, - файл сохранить как - внизу покажет текущую кодировку

Deff 15.02.2013 01:56

Имхо по умолчанию скрипты грузятся в UTF-8 и трансформируются в кодинг страницы, вот для ANSI - точно нужно прописывать

Для UTF-8 - пофег походу атрибут charsetcharset="windows-1251"
<!DOCTYPE HTML>
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<script type="text/javascript" src="http://hostjs-mybb2011.narod.ru/js/asdsa.js?5"></script>
<script type="text/javascript" charset="UTF-8" src="http://hostjs-mybb2011.narod.ru/js/asdsa.js?5"></script>
<script type="text/javascript" charset="windows-1251" src="http://hostjs-mybb2011.narod.ru/js/asdsa.js?5"></script>
</head>
  <body>

  </body>
</html>

danik.js 15.02.2013 02:05

Цитата:

Сообщение от Deff
Имхо по умолчанию скрипты грузятся в UTF-8

Похоже на то. Ибо у твоего скрипта нигде не указана кодировка явно, причем дефолтная кодировка для текстового содержимого - windows-1251. А для скриптов видимо utf-8

Так или иначе, атрибут charset (на который я давал ссылку выше) решает проблему ТС.

Встроенные сюда примеры не будут работать корректно. Кодировка html-документов один фиг utf-8, несмотря на тег meta

dmitriymar 15.02.2013 02:06

Цитата:

Сообщение от Deff
Для UTF-8 - пофег походу атрибут charset="windows-1251"

не пофиг .

"Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографике для обычного текста .....она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского, македонского и болгарского.

Имеет два недостатка............."

Deff 15.02.2013 02:07

Нун попробовать в ANSI

danik.js 15.02.2013 02:08

Кодировка страницы windows-1251, кодировка скрипта utf-8, но она явно нигде не указывается. В итоге кракозябры:
http://new-era63.ru/hello-windows1251.php

Кодировка страницы windows-1251, кодировка скрипта utf-8, об этом сообщается через атрибут charset скрипта, в итоге все ок:
http://new-era63.ru/hello-utf8.php

Жать Ctr+F5, иначе (хром как минимум) кодировка кэшируется.

Deff 15.02.2013 02:10

<!DOCTYPE HTML>
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<script type="text/javascript" src="http://hostjs-mybb2011.narod.ru/js/2_asdsa.js"></script>
<script type="text/javascript" charset="UTF-8" src="http://hostjs-mybb2011.narod.ru/js/2_asdsa.js"></script>
<script type="text/javascript" charset="windows-1251" src="http://hostjs-mybb2011.narod.ru/js/2_asdsa.js"></script>
</head>
  <body>

  </body>
</html>

danik.js 15.02.2013 02:10

Цитата:

Сообщение от dmitriymar
да и есть частичное пересечение. в сообщение все буквы русского алфавита

Бред. Коды символов русского алфавита в utf-8 и в windows-1251 разные.

Deff 15.02.2013 02:14

Для ANSI charset- работает!
(*В Ие 6-7 вообще не подгружается ANSI без указания правильной кодировки в charset
в ИЕ8 - ошибка сценария
Гугол вообще "имел" эту ANSI - не обращает внимания на charset - одни кракозябры,
Так шо пишите скрипты в UTF - 8

dmitriymar 15.02.2013 02:22

Цитата:

Сообщение от danik.js
Бред. Коды символов русского алфавита в utf-8 и в windows-1251 разные.

открой для себя википедию

Начиная с версии Юникода 5.1 для кириллицы выделено четыре раздела:
название диапазон кодов (hex) версия Юникода
Cyrillic кириллица 0400 04FF 1.1"
...............


виндовс 1251

А
410 Б
........

44E я
44F

вопрос в том в каких местах пересекаются

danik.js 15.02.2013 02:22

Deff, для utf-8 тоже работает. смотри мои примеры. В хроме кстати твоя демка всегда показывает Привет!

Deff 15.02.2013 02:35

danik.js,
У меня в Хроме демо из поста 18 - везде кракозябры
(*Может под XP ?

danik.js 15.02.2013 02:52

Deff, ошибочка. Я имел ввиду 13 пост. 18 - везде кракозябры (в хроме) Как я уже говорил, хром кэширует кодировку. В ФФ третий скрипт отображается корректно, он ниче не кэширует видимо.

Цитата:

Сообщение от dmitriymar
виндовс 1251

А
410 Б
........

44E я
44F

Ты че городишь? В windows-1251 всего 256 символов ))

Цитата:

Сообщение от dmitriymar
открой для себя википедию

Научись ей пользоваться )


Часовой пояс GMT +3, время: 21:21.