Показать полную графическую версию : [решено] Как изменить кодировку новосозданного документа
hasherfrog
06-06-2006, 13:52
Вопрос достаточно сложный.
WINDOWS XP, Firefox 1.5.0.4
По умолчанию, кодировка страницы, созданной через javascript - UTF-8.
Как выглядит "создание":
javascript:
(function(){
nW = window.open('','test','width=200,height=200');
nD=nW.document;
nD.open();
nD.writeln('<?xml version="1.0" encoding="windows-1251"?>');
nD.writeln('<html><head><title>Test</title><base target=\'_blank\'>');
nD.writeln('<meta http-equiv="content-type" content="text/html; charset=windows-1251">');
nD.writeln('</head><script></script><body>');
nD.writeln('<p>ТЕКСТ</p>');
nD.writeln('</body></html>');
nD.close();
nW.focus();
/*nW.close();*/
}
)()
Когда документ создан, всё вроде бы нормально. Но если его теперь сохранить... Получим кракозябли.
Тоже самое будет, если созданный документ имеет POST-форму - передаваемый текст будет искорёжен.
Если у созданного документ посмотреть кодировку - увидим... UTF-8.
А по идее, должны иметь WIN1251.
Если бы вопрос стоял о сохранении документа, я бы сменил кодировку в тексте "charset="
Если бы форма была метода GET, я переконвертировал бы текст UTF8 -> WIN1251.
Но у меня затык именно с формой POST. :[
Задача такая: нужно явным образом указать нужную кодировку у созданного через javascript документа.
Есть какие-нибудь мысли по поводу?
Vlad Drakula
06-06-2006, 13:58
hasherfrog
почему с POST не поспунить так же как с GET ???
Если бы форма была метода GET, я переконвертировал бы текст UTF8 -> WIN1251.
hasherfrog
06-06-2006, 14:12
Vlad Drakula
Потому что GET (в таком случае) я формирую уже прямым созданием корректного URL'а и перехожу по нему.
То есть я не перекодирую текст, записываю в форму, делаю сабмит, а сразу, самостоятельно иду куда мне нужно.
А с POST'ом такой номер не пройдёт - мне нужно именно корректно выставить значения текстовых полей.
А я не могу!!! Я туда пишу вроде корректный текст, но он-то "оказывается" UTF-8! Хотя при этом передаётся - как WIN1251.
Принимающий сервер обалдевает и не понимает.
Vlad Drakula
06-06-2006, 14:20
hasherfrog
чего то я не помню чтобы на принимающий сервер отправлялось значение в какой кодировке текст...
hasherfrog
06-06-2006, 14:26
Для наглядности. Передаём слово "АБВГДЕЙКА"
Как должно быть (это вариант вызова со страницы, предварительно сохранённой на диск)
POST /request.php HTTP/1.1
Host: xxx.xxx.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type: application/x-www-form-urlencoded
Content-Length: xx
text=%C0%C1%C2%C3%C4%C5%C9%CA%C0
А вот как передаётся со страницы, созданной javascript'ом:
POST /request.php HTTP/1.1
Host: xxx.xxx.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type: application/x-www-form-urlencoded
Content-Length: xx
text=%D0%90%D0%91%D0%92%D0%93%D0%94%D0%95%D0%99%D0%9A%D0%90
Принимающий сервер ждёт от меня (очевидно) win1251.
А я ему втюхиваю UTF8. Но как переслать именно win1251???
hasherfrog
06-06-2006, 14:50
// На тот случай, если кто-нибудь будет думать сходно со мной
// Я уже кучу бредовых вариантов перепробывал.
Если перекодировать текст (который UTF-8) в Win1251, затем сделать unescape, записать результат в форму, и послать.
При посылке вроде будет сделан escape() и "получится". Но в результате всё равно посылается бред:
text=%C3%80%C3%81%C3%82%C3%83%C3%84%C3%85%C3%89%C3%8A%C3%80
В общем, все эти трюки ничего не дают.
Единственный способ - явно указать Firefox, что кодировка страницы, с которой производится отправка - Win 1251.
А вот это я никак не могу сделать, по умолчанию она всё время UTF-8.
Vlad Drakula
06-06-2006, 16:13
hasherfrog
эта бролмемма возникает тольуо в FF или и в других бпроузерах тоже?
hasherfrog
07-06-2006, 10:50
Vlad Drakula
Всё, разрешилось.
http://forum.mozilla.ru/viewtopic.php?id=10773
Всем спасибо.
<script>
function show() {
var doc = 'data:text/html;charset=windows-1251,<html><head><title>Test</title><base target="_blank"></head><script><'+'/script><body><p>ТЕКСТ</p></body></html>';
var nW = window.open(doc,'test','width=200,height=200');
nW.focus();
return false;
}
</script>
<body><a onclick="return show()">click me</a></body>
То, что нужно.
hasherfrog
07-06-2006, 14:17
Результат (Данный букмарклет ищет нужное слово в словарях и онлайн-энциклопедиях на dic.academic.ru)
javascript:(function(){var x=prompt('Search for','');if(x!=null){var doc='<html><head><title>Test</title><base target="_blank">';doc+='</head><script><'+'/script><body>';doc+='<form action="http://dic.academic.ru/searchall.php" method="post" name="searchform" accept-charset="windows-1251">';var chks=new Array("dic[lower]","dic[ushakov]","dic[enc1p]","dic[enc2p]","dic[enc3p]","dic[ogegova]","dic[brokgauz]","dic[muller]","dic[idioms]","dic[fin_enc]","dic[econ_dict]","dic[efin_dic]","dic[fin2]","dic[anticris]","dic[geolog]","dic[hist_dic]","dic[biograf]","onlythermin");for(var i=0;i<chks.length;i++){doc+='<input name="';doc+=chks[i];doc+='" checked="checked" type="checkbox">';}doc+='<input name="thermin" type="text" value="';doc+=x;doc+='">';doc+='<input name="sss" type="submit">';doc+='</body></html>';var nW=window.open('','hash','width=200,height=100');var nD=nW.document;nD.open('text/html');nD.writeln(doc);nD.close();nW.focus();nD.searchform.submit();nW.close();}})()
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.